完成多并发服务器端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);
}