当前位置: 技术问答>linux和unix
如何关闭socket
来源: 互联网 发布时间:2015-11-30
本文导语: 为什么在sever端收到sever程序关闭之后,假如client端没有关闭,需要等一段时间才能再次绑定socket那?要是在关掉sever程序之前先关掉client端,就可以立即再次绑定。 已经让sever端退出时关闭socket了啊,请问这是怎么回...
为什么在sever端收到sever程序关闭之后,假如client端没有关闭,需要等一段时间才能再次绑定socket那?要是在关掉sever程序之前先关掉client端,就可以立即再次绑定。
已经让sever端退出时关闭socket了啊,请问这是怎么回事??
已经让sever端退出时关闭socket了啊,请问这是怎么回事??
|
关闭终端是不是向程序发送SIGHUP信号:SIGHUP信号在进程的控制终端被关闭时,由内核发往进程。(好象文件fd关联的文件被删除后,写fd时也发该信号)
要关闭一个程序,可以向它发各种信号,只要它不屏蔽:)
另外正常关闭客户终端,服务端socket收到的是“FIN信号”(这不是应用级的信号,是传输层信号,就是低层信号啦),这时你服务端socket可读,read它会返回0,你就知道客户端关闭了。
要关闭一个程序,可以向它发各种信号,只要它不屏蔽:)
另外正常关闭客户终端,服务端socket收到的是“FIN信号”(这不是应用级的信号,是传输层信号,就是低层信号啦),这时你服务端socket可读,read它会返回0,你就知道客户端关闭了。
|
先关client,可以,因为此时服务器端的地址和端口已经释放掉;
先关服务器端,不可以,是因为此时服务器端的地址和端口还没释放掉,要等2--4分钟才可以;
关关谁,谁的地址和端口就要等2--4分钟才可以用;
TCP/IP协议确定了.
用这个SO_REUSEADDR和SO_REUSEPORT可以解决上面的问题.
先关服务器端,不可以,是因为此时服务器端的地址和端口还没释放掉,要等2--4分钟才可以;
关关谁,谁的地址和端口就要等2--4分钟才可以用;
TCP/IP协议确定了.
用这个SO_REUSEADDR和SO_REUSEPORT可以解决上面的问题.
|
你在创建的套接口上设置上SO_REUSEADDR和SO_REUSEPORT试一下?
|
你在创建的套接口上设置上SO_REUSEADDR和SO_REUSEPORT