当前位置: 技术问答>linux和unix
Linux socket close后重新启动server的问题
来源: 互联网 发布时间:2017-02-26
本文导语: 初接触socket编程,自己仿照书上例子写了一个短小的程序,遇到了点问题,如下: server和client正常连接后,如果client发送字符串“close”,server收到后就调用close()这个接口,程序执行完毕并退出,这都没有问题,但...
初接触socket编程,自己仿照书上例子写了一个短小的程序,遇到了点问题,如下:
server和client正常连接后,如果client发送字符串“close”,server收到后就调用close()这个接口,程序执行完毕并退出,这都没有问题,但是在调试过程中,我马上又启动server的话,就会提示说Bind:Address already in use。但如果过一会再启动server的话,就不存在这个问题了。
想请教大家,close()不能马上关闭socket吗?
server和client正常连接后,如果client发送字符串“close”,server收到后就调用close()这个接口,程序执行完毕并退出,这都没有问题,但是在调试过程中,我马上又启动server的话,就会提示说Bind:Address already in use。但如果过一会再启动server的话,就不存在这个问题了。
想请教大家,close()不能马上关闭socket吗?
|
错, 除非开启SO_LINGER选项并设置非0等待时间,否则close永远立即返回,并且端口将会立即进入TIME_WAIT状态而导致一段时间内无法重用,不过是可以优化TCP参数文件将这个状态忽略掉。