“使用中的地址”和“使用中的地址”之间的区别在 Windows 和 Linux 上使用 bind() - errno=98

发布于 2024-10-17 09:18:10 字数 366 浏览 2 评论 0原文

我有一个监听端口的小型 TCP 服务器。在调试时,我通常会按 CTRL-C 服务器来终止进程。

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

当bind()失败时,它返回errno=98,地址正在使用。

我想更好地理解实现上的差异。 Windows 确实对开发人员更友好,但我有点怀疑 Linux 是否做了“错误的事情”。

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

有没有办法在 Linux 开发过程中改变这种行为?我希望复制 Windows 的做法

I have a small TCP server that listens on a port. While debugging it's common for me to CTRL-C the server in order to kill the process.

On Windows I'm able to restart the service quickly and the socket can be rebound. On Linux I have to wait a few minutes before bind() returns with success

When bind() is failing it returns errno=98, address in use.

I'd like to better understand the differences in implementations. Windows sure is more friendly to the developer, but I kind of doubt Linux is doing the 'wrong thing'.

My best guess is Linux is waiting until all possible clients have detected the old socket is broken before allowing new sockets to be created. The only way it could do this is to wait for them to timeout

is there a way to change this behavior during development in Linux? I'm hoping to duplicate the way Windows does this

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笑百媚生 2024-10-24 09:18:10

您想要在 Linux 上的套接字上使用 SO_REUSEADDR 选项。相关的联机帮助页是 socket(7)。这是其用法的示例这个问题解释了发生的情况。

这是此答案的副本。

在 Linux 上,SO_REUSEADDR 允许您绑定到地址,除非存在活动连接。在 Windows 上,这是默认行为。在 Windows 上,SO_REUSEADDR 允许您另外将多个套接字绑定到相同的地址。请参阅此处此处了解更多信息。

You want to use the SO_REUSEADDR option on the socket on Linux. The relevant manpage is socket(7). Here's an example of its usage. This question explains what happens.

Here's a duplicate of this answer.

On Linux, SO_REUSEADDR allows you to bind to an address unless an active connection is present. On Windows this is the default behaviour. On Windows, SO_REUSEADDR allows you to additionally bind multiple sockets to the same addresses. See here and here for more.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文