并发程序——tcp

原创 2012年03月30日 21:33:01
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define MY_PORT 3333

int main(int argc ,char **argv)
{
     int listen_fd,accept_fd;
     struct sockaddr_in     client_addr;
     int n;
    
     if((listen_fd=socket(AF_INET,SOCK_STREAM,0))<0)
      {
            printf("Socket Error:%s\n\a",strerror(errno));
            exit(1);
      }
    
     bzero(&client_addr,sizeof(struct sockaddr_in));
     client_addr.sin_family=AF_INET;
     client_addr.sin_port=htons(MY_PORT);
     client_addr.sin_addr.s_addr=htonl(INADDR_ANY);
     n=1;
     /* 如果服务器终止后,服务器可以第二次快速启动而不用等待一段时间  */
     setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(int));
     if(bind(listen_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))<0)
      {
            printf("Bind Error:%s\n\a",strerror(errno));
            exit(1);
      }
      listen(listen_fd,5);
      while(1)
      {
       accept_fd=accept(listen_fd,NULL,NULL);
       if((accept_fd<0)&&(errno==EINTR))
              continue;
       else if(accept_fd<0)
        {
            printf("Accept Error:%s\n\a",strerror(errno));
            continue;
        }
      if((n=fork())==0)
       {
            /* 子进程处理客户端的连接 */
            char buffer[1024];

            close(listen_fd);
            n=read(accept_fd,buffer,1024);
            write(accept_fd,buffer,n);
            close(accept_fd);
            exit(0);
       }
       else if(n<0)
            printf("Fork Error:%s\n\a",strerror(errno));
       close(accept_fd);
      }
}
//并发程序——tcp服务器

相关文章推荐

Java高并发程序设计——学习摘要-第一章

何去何从的并行计算 一般的情况下并行并不是一个很好的例子,但是在服务端程序或者图形学程序下,并行是个不错的选择。原因是服务端程序是拥有复杂的业务逻辑时,并发是个不错的选择。 就硬件领域的单核CPU而...
  • y4356
  • y4356
  • 2016年09月26日 12:36
  • 103

实战Java高并发程序设计——单例模式

单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只有一个实例。这种模式有一下两个好处: 1.对于使用频繁地对象,可以省略new操...

基于嵌入式操作系统VxWorks的多任务并发程序设计――中断与任务

中断处理是整个运行系统中优先级最高的代码,可以抢占任何任务级代码运行。中断机制是多任务环境运行的基础,是系统实时性的保证。几乎所有的实时多任务操作系统都需要一个周期性系统时钟中断的支持,用以完成时间片...

Linux下生产者消费者问题详细分析(操作系统期中考试论文---并发程序的同步和互斥)

这是操作系统期中考试时我写的小论文,想要文档及代码的点击下载。 要求如下: 本篇为了简洁,只贴有用的信息。 执行逻辑说明:          程序启动后首先初始化信号量集和循环缓冲队列。然后按照...

【实战Java高并发程序设计 1】Java中的指针:Unsafe类

Java中的指针有你看不到的一面。
  • xinaij
  • xinaij
  • 2015年11月25日 16:25
  • 1478

【实战Java高并发程序设计 2】无锁的对象引用:AtomicReference

AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普通的对象引用。也就是它可以保证你在修...
  • xinaij
  • xinaij
  • 2015年11月26日 15:07
  • 972

并发程序的乱序之一:编译器指令重排

并发执行的程序存在三种场景的乱序,编译器对指令重排导致变量之间的隐式逻辑打乱,多线程的内核调度,多核之间的cache一致性。...

Java高并发程序设计 JDK并发包(上)

1. 重入锁  重入锁可以完全替代synchronized关键字。使用java.util.concurrent.locks.ReentrantLock类实现,下面是一个重入锁的简单例子: ...

《Java高并发程序设计》学习 --1.1基础概念

1)同步和异步 同步和异步通常用来形容一次方法调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者可以继...

《Java高并发程序设计》学习 --7.2 Akka之有关消息投递的一些说明

整个Akka应用是由消息驱动的。消息是除了Actor之外最重要的核心组件。作为在并发程序中的核心组件,在Actor之间传递的消息应该满足不可变性,也就是不变模式。因为可变的消息无法高效的在并发环境中使...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:并发程序——tcp
举报原因:
原因补充:

(最多只允许输入30个字)