编写多并发服务器容易出现的错误及解决方法

本文介绍了一个多线程服务器端SOCKET编程案例,针对accept:invalidargument错误进行了详细分析并给出了两种解决方案:一是等待一段时间运行网络程序;二是通过setsockopt进行设置,避免bind:Addressalreadyinuse错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完成多并发服务器端SOCKET代码。实现方式是多线程。遇到问题:

(1)一开始出现accept :invalid argument.

   原因有二:第一,可能是accept函数的第三个参数没有初始化没有给addrlen传入合法的值,或者是没有初始化(addrlen= sizeof(addr))。

第二: 在参数1处出错,多半情况是sockfd值非法,也即是没有绑定(bind),监听(listen)或者是负值等。

解决方法:经过分析是在绑定那里出错。bind: Address already in use

原因:操作系统没有立即释放端口

解决一:等待一段时间运行网络程序即可

解决二:通过setsockopt进行设置,关键代码如下。

 解决在close之后会有一个WAIT_TIME,导致bind失败的问题

2     int val = 1;

3     int ret =setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,(void *)&val,sizeof(int));

4     if(ret == -1)

5  {

6         printf("setsockopt");

7         exit(1);

}    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值