首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows和Linux - errno=98中绑定()的“使用中的地址”的区别

问Windows和Linux - errno=98中绑定()的“使用中的地址”的区别
EN

Stack Overflow用户
提问于 2011-02-13 01:20:56
回答 1查看 6K关注 0票数 1

我有一个侦听端口的小型TCP服务器。在调试时,我经常使用CTRL-C组合键来终止服务器进程。

在Windows上,我能够快速重启服务,并且可以重新绑定套接字。在Linux上,我必须等待几分钟才能成功返回bind()

当绑定()失败时,它返回errno=98,地址在使用中。

我想更好地理解实现中的差异。Windows当然对开发人员更友好,但我怀疑Linux做的是“错误的事情”。

我最好的猜测是,Linux正在等待,直到所有可能的客户端都检测到旧套接字已损坏,然后才允许创建新套接字。它能做到这一点的唯一方法是等待它们超时

在Linux开发期间,有没有办法改变这种行为?我希望能复制Windows的做法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-13 01:27:58

您希望在Linux上的套接字上使用SO_REUSEADDR选项。相关的手册页是socket(7)。下面是它的用法的example。This question解释了发生了什么。

Here's此答案的副本。

在Linux上,SO_REUSEADDR允许您绑定到一个地址,除非存在活动连接。在Windows上,这是默认行为。在Windows上,SO_REUSEADDR允许您另外将多个套接字绑定到相同的地址。有关详细信息,请参阅here和here。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4979425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档