1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 运维 - 正文

君子好学,自强不息!

Linux Accept函数问题说明求指点

2022-11-08 | 运维 | admin | 645°c
A+ A-

系统调用 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等函数都用过,没问题。 还请各位高手帮忙看看,谢谢了

本文来源:1818IP

本文地址:https://www.1818ip.com/post/7954.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。