socket句柄不能及时释放的问题

think__ 2004-02-03 10:28:25
unixware系统,通信服务程序,监听socket或连接socket,在程序关闭或异常退出后马上重启程序,socket创建不能成功,要等一定时间后重启程序,才能正常运行。
请求帮助
...全文
556 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
blh 2004-02-03
  • 打赏
  • 举报
回复
注册signal函数,接管SIGINT等信号,在信号处理函数中关闭套结字
sunriselx 2004-02-03
  • 打赏
  • 举报
回复
fierygnu(va_list)能不能说详细点,谢谢
chairou 2004-02-03
  • 打赏
  • 举报
回复
呵呵, fierygnu(va_list) 的方法就可以了,我以前不知道的
时候,还给BIND()自己写了一个bind()失败的话,sleep(5000)
再bind()一次,呵呵,好搞笑
xinyi 2004-02-03
  • 打赏
  • 举报
回复
處理異常退出信號,關了它
fierygnu 2004-02-03
  • 打赏
  • 举报
回复
进入了TIME_WAIT状态。用SO_REUSEADDR选项。
kaederukawacy 2004-02-03
  • 打赏
  • 举报
回复
正常退出是在C/S端都调用CLOSE 关闭 连接的SOCKET 就不会有这种情况

异常退出或者KILL掉后要等待 SOCKET 自己超时是没有办法的
rexp 2004-02-03
  • 打赏
  • 举报
回复
SO_REUSEADDR
选项有关
fierygnu 2004-02-03
  • 打赏
  • 举报
回复
to 楼主:
man setsockopt
fierygnu 2004-02-03
  • 打赏
  • 举报
回复
这个与异常退出没有关系。TCP协议规定有TIME_WAIT状态,这样可以避免网络里延时发送来的包引起错误。
yuanlei1978113 2004-02-03
  • 打赏
  • 举报
回复
在程序关闭或异常退出后你要做收尾工作,
1.shutdown()
2.close()
3.sock = 0;
这样就没有问题了(异常推出要捕捉系统信号)
Algopro 2004-02-03
  • 打赏
  • 举报
回复
int optval = 1;
setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧