程序关闭后套接字保持打开状态(C++)

fre*_*oma 6 c++ sockets bind

我正在编写一个小型服务器应用程序,问题是,当我关闭我的应用程序时(或者更好的是,在eclipse中按下终止按钮),套接字有时会保持打开状态,所以当我下次执行我的应用程序时,绑定()将因"已使用的地址"而失败.程序退出时如何正确关闭套接字?我已经把

close(mySocket);
Run Code Online (Sandbox Code Playgroud)

在类析构函数中,但这似乎没有改变任何东西.

Tyn*_*nan 4

http://hea-www.harvard.edu/~fine/Tech/addrinuse.html应该可以回答您的很多问题。我倾向于使用 SO_REUSEADDR 来解决这个问题。

  • 调用 close() 不一定会避免已在使用的地址。如果内核在进程结束之前没有从您通过调用 close 发送的 FIN 中获取 ACK,则绑定的套接字将进入 TIME_WAIT,并且您必须等待几分钟,然后内核才会决定它可能不会这样做。不会被重用。设置 SO_REUSEADDR 将允许内核立即重用该地址。 (5认同)