当前位置: 技术问答>linux和unix
socket句柄不能及时释放的问题
来源: 互联网 发布时间:2015-06-07
本文导语: unixware系统,通信服务程序,监听socket或连接socket,在程序关闭或异常退出后马上重启程序,socket创建不能成功,要等一定时间后重启程序,才能正常运行。 请求帮助 | 进入了TIME_WAIT状态。用SO_REUSEADDR选...
unixware系统,通信服务程序,监听socket或连接socket,在程序关闭或异常退出后马上重启程序,socket创建不能成功,要等一定时间后重启程序,才能正常运行。
请求帮助
请求帮助
|
进入了TIME_WAIT状态。用SO_REUSEADDR选项。
|
int optval = 1;
setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
|
SO_REUSEADDR
选项有关
选项有关
|
正常退出是在C/S端都调用CLOSE 关闭 连接的SOCKET 就不会有这种情况
异常退出或者KILL掉后要等待 SOCKET 自己超时是没有办法的
异常退出或者KILL掉后要等待 SOCKET 自己超时是没有办法的
|
處理異常退出信號,關了它
|
呵呵, fierygnu(va_list) 的方法就可以了,我以前不知道的
时候,还给BIND()自己写了一个bind()失败的话,sleep(5000)
再bind()一次,呵呵,好搞笑
时候,还给BIND()自己写了一个bind()失败的话,sleep(5000)
再bind()一次,呵呵,好搞笑
|
fierygnu(va_list)能不能说详细点,谢谢
|
注册signal函数,接管SIGINT等信号,在信号处理函数中关闭套结字
|
在程序关闭或异常退出后你要做收尾工作,
1.shutdown()
2.close()
3.sock = 0;
这样就没有问题了(异常推出要捕捉系统信号)
1.shutdown()
2.close()
3.sock = 0;
这样就没有问题了(异常推出要捕捉系统信号)