我使用Ctrl-C终止服务器,我认为它将立即关闭套接字。但是事实证明,如果我绑定相同的端口,它将说绑定失败。我使用的是Mac OSX。有什么想法吗?我什至为ctrl C实现了信号处理程序以将其关闭,但仍然存在相同的问题。
您可以在绑定它之前消除此错误(至少在Linux上,我不了解OSX)
int on = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, on.sizeof); // or sizeof(on) in C
当套接字关闭时,内核会保留一个句柄,以防电线上仍有一些待处理的数据乱序或延迟到达,因此它可以通过告诉另一端现在已经关闭来理智地处理它而不是将这些随机块传递给下一个应用程序。如果您想了解更多信息,则称为“ time_wait”状态。释放所有内容需要几分钟,以确保所有内容都清晰可见。
这个重用addr选项告诉它不必担心,只要没有等待时间就重新绑定即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句