Linux Accept函数问题说明求指点


系统调用   accept()   会有点古怪的地方的!你可以想象发生   这样的事情:有人从很远的地方通过一个你在侦听   (listen())   的端口连接   (connect())   到你的机器。它的连接将加入到等待接受   (accept())   的队列   中。你调用   accept()   告诉它你有空闲的连接。它将返回一个新的套接字文   件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口,   新的在准备发送   (send())   和接收   (   recv())   数据。这就是Linux Accept函数的过程!  

Linux Accept函数代码片段如下:
 

  1. struct sockaddr addrc;  
  2. int fdc;  
  3. socklen_t len=sizeof(struct sockaddr_in);  
  4. fdc=accept(fds,(struct sockaddr*)&addrc,&len);  
  5. if(fdc==-1)  
  6. {  
  7. fprintf(stderr,"Accept error:%s\n",strerror(errno));  
  8. switch(errno)  
  9. {  
  10. case EBADF:  
  11. printf("EBADF\n");  
  12. break;  
  13. case EFAULT:  
  14. printf("EFAULT\n");  
  15. break;  
  16. case ENOTSOCK:  
  17. printf("ENOTSOCK\n");  
  18. break;  
  19. case EOPNOTSUPP:  
  20. printf("EOPNOTUPP\n");  
  21. break;  
  22. case EPERM:  
  23. case ENOBUFS:  
  24. case ENOMEM:  
  25. printf("THis\n");  
  26. case EINVAL:  
  27. printf("EINVAL\n");  
  28. break;  
  29. default:  
  30. printf("Other\n");  
  31. }  
  32. exit(1);  

Linux Accept函数运行的时间会报告说 Accept error:Invalid argument
EINVAL
根据我个人猜测,应该是第三个参数引起来的。accept的第一个参数应该没问题,通过函数输出第一个参数是一个正值,而且此前的bind等函数都用过,没问题。
还请各位高手帮忙看看,谢谢了

相关内容