系统调用 accept() 会有点古怪的地方的!你可以想象发生 这样的事情:有人从很远的地方通过一个你在侦听 (listen()) 的端口连接 (connect()) 到你的机器。它的连接将加入到等待接受 (accept()) 的队列 中。你调用 accept() 告诉它你有空闲的连接。它将返回一个新的套接字文 件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口, 新的在准备发送 (send()) 和接收 ( recv()) 数据。这就是Linux Accept函数的过程!
Linux Accept函数代码片段如下:
- struct sockaddr addrc;
- int fdc;
- socklen_t len=sizeof(struct sockaddr_in);
- fdc=accept(fds,(struct sockaddr*)&addrc,&len);
- if(fdc==-1)
- {
- fprintf(stderr,"Accept error:%s\n",strerror(errno));
- switch(errno)
- {
- case EBADF:
- printf("EBADF\n");
- break;
- case EFAULT:
- printf("EFAULT\n");
- break;
- case ENOTSOCK:
- printf("ENOTSOCK\n");
- break;
- case EOPNOTSUPP:
- printf("EOPNOTUPP\n");
- break;
- case EPERM:
- case ENOBUFS:
- case ENOMEM:
- printf("THis\n");
- case EINVAL:
- printf("EINVAL\n");
- break;
- default:
- printf("Other\n");
- }
- exit(1);
Linux Accept函数运行的时间会报告说 Accept error:Invalid argument
EINVAL
根据我个人猜测,应该是第三个参数引起来的。accept的***个参数应该没问题,通过函数输出***个参数是一个正值,而且此前的bind等函数都用过,没问题。
还请各位高手帮忙看看,谢谢了
【编辑推荐】
- Linux 查看磁盘空间实现代码介绍
- Linux操作系统需要微软的十大帮助
- 探寻Linux到底需要多低的配置
- Linux测试工具tcpdump监视TCP/IP连接命令介绍
- Linux流量控制实例应用介绍