系统调用 accept() 会有点古怪的地方的!你可以想象发生 这样的事情:有人从很远的地方通过一个你在侦听 (listen()) 的端口连接 (connect()) 到你的机器。它的连接将加入到等待接受 (accept()) 的队列 中。你调用 accept() 告诉它你有空闲的连接。它将返回一个新的套接字文 件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口, 新的在准备发送 (send()) 和接收 ( recv()) 数据。这就是Linux Accept函数的过程!
Linux Accept函数代码片段如下:
structsockaddraddrc; intfdc; socklen_tlen=sizeof(structsockaddr_in); fdc=accept(fds,(structsockaddr*)&addrc,&len); if(fdc==-1) { fprintf(stderr,"Accepterror:%s\n",strerror(errno)); switch(errno) { caseEBADF: printf("EBADF\n"); break; caseEFAULT: printf("EFAULT\n"); break; caseENOTSOCK: printf("ENOTSOCK\n"); break; caseEOPNOTSUPP: printf("EOPNOTUPP\n"); break; caseEPERM: caseENOBUFS: caseENOMEM: printf("THis\n"); caseEINVAL: printf("EINVAL\n"); break; default: printf("Other\n"); } exit(1);
Linux Accept函数运行的时间会报告说 Accept error:Invalid argument EINVAL 根据我个人猜测,应该是第三个参数引起来的。accept的***个参数应该没问题,通过函数输出***个参数是一个正值,而且此前的bind等函数都用过,没问题。 还请各位高手帮忙看看,谢谢了
相关文章
标签:系统运维