当前位置: 技术问答>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))
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!