linux网络编程中所遇到的问题_Devin_新浪博客

最近在linux网络编程所遇到的几个问题,这里备注一下,都是在网上找到的解决办法。

1. 服务器端接收来自客户端的信息,其中在连接时出现 accept: Invalid argument 错误。

在网上找到信息,说accept函数低最后一个参数sin_size 必须要为正数,因此在定义初始化sin_size 变量时先对其初始化为一个正整数。

socklen_t sin_size = 4;

if(-1 == (sockfd_client = accept(sockfd, (struct sockaddr*)&client_sockaddr,&sin_size)))
    {
      perror("accept");
      goto error; 
    }

2. 在客户端与服务器端进行通信时,经常需要将服务器端进行强制关闭“ctrl+c”,而关闭后马上重新执行server程序是出现Bind error: Address already in use 错误。

 原因是bind绑定套接字后,如果退出,TCP 套接字状态 TIME_WAIT 引起。该状态在套接字关闭后约保留 2 到4分钟。在 TIME_WAIT 状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。

修改为在bind函数之前添加ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );函数,其中on设置为1,来避开TIME_WAIT,使端口可以马上重用。

此处参考 linux套接字中的5个隐患:http://www.ibm.com/developerworks/cn/linux/l-sockpit/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值