当前位置: 技术问答>linux和unix
在linux下面,为什么TCP服务器端在客户端没有断开前推出程序会关不掉socket?
来源: 互联网 发布时间:2015-01-24
本文导语: 现象是这样的: 我启动了tcp的服务器端,用客户端连上去,在客户端没有主动退出连接前,我把服务器端程序停掉,程序退出前用close关掉监听端口,然后重起程序,在listen的时候就会报告端口已经被绑定,这是不是...
现象是这样的:
我启动了tcp的服务器端,用客户端连上去,在客户端没有主动退出连接前,我把服务器端程序停掉,程序退出前用close关掉监听端口,然后重起程序,在listen的时候就会报告端口已经被绑定,这是不是表明原来那个服务器监听端口还没有被关掉?过一段时间在重新启动程序,就没有问题了,请问这种情况是怎么回事?怎么解决?
我启动了tcp的服务器端,用客户端连上去,在客户端没有主动退出连接前,我把服务器端程序停掉,程序退出前用close关掉监听端口,然后重起程序,在listen的时候就会报告端口已经被绑定,这是不是表明原来那个服务器监听端口还没有被关掉?过一段时间在重新启动程序,就没有问题了,请问这种情况是怎么回事?怎么解决?
|
当你关闭监听端口时,内核的一些资源并不马上释放,所以你再开时当然会说是重复
使用同一端口,解决的办法是设置你的监听句柄重用该地址,假如是sockfd,调用在程序中加入如下语句。
int one = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(int))
使用同一端口,解决的办法是设置你的监听句柄重用该地址,假如是sockfd,调用在程序中加入如下语句。
int one = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(int))