accept的Invalid Argument错误

http://adam281412.blog.163.com/blog/static/3370006720120123035967/


在编写socket程序的时候,遇到一个奇怪的问题,服务端用accept接收请求,客户端通过telnet连接上去。结果每次连上去以后连接又立即断开了,而server端accept以后并没有close连接。

 

代码如下:

C代码
  1. /*server*/  
  2. int main()  
  3. {  
  4.     //...  
  5.     socklen_t cli_len;  
  6.     struct sockaddr_in clientaddr;  
  7.       
  8.     while(1)  
  9.     {  
  10.         int connfd = accept(listenfd, (struct sockaddr *)&clientaddr, &cli_len);  
  11.         if(connfd < 0)  
  12.         {  
  13.             perror("accept");  
  14.         }  
  15.           
  16.         //...  
  17.     }  
  18.       
  19.     return 0;  
  20. }  

 最后发现是初始化的问题,cli_len和clientaddr不能为负值,因为上面没有初始化,所以在accept的时候会出问题。最后加上初始化的代码,问题就解决了。

C代码   收藏代码
  1. /*server*/  
  2. int main()  
  3. {  
  4.     //...  
  5.     socklen_t cli_len;  
  6.     struct sockaddr_in clientaddr;  
  7.       
  8.     while(1)  
  9.     {  
  10.         memset(&clientaddr, 0, sizeof(struct sockaddr_in));  
  11.         cli_len = 1;  
  12.         int connfd = accept(listenfd, (struct sockaddr *)&clientaddr, &cli_len);  
  13.         if(connfd < 0)  
  14.         {  
  15.             perror("accept");  
  16.         }  
  17.           
  18.         //...  
  19.     }  
  20.       
  21.     return 0;  
  22. }  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值