微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Windows和Linux上,使用地址与bind之间的区别 – errno = 98

我有一个小的TCP服务器,监听一个端口。 在debugging的时候,我通常会selectCTRL-C服务器来终止进程。

在Windows上,我可以快速重启服务,套接字可以被反弹。 在Linux上,我必须等待bind()返回成功之前的几分钟

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

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

绑定与Linux中的WiFi接口

使用Berkeley套接字通过TCP连接传输可变结构大小

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

有没有办法改变这种行为在Linux的发展? 我希望能够复制Windows的方式

你想在Linux的套接字上使用SO_REUSEADDR选项。 相关的手册页是socket(7) 。 这是一个使用的例子 。 这个问题解释发生了什么。

这是这个答案的重复。

在Linux上, SO_REUSEADDR允许您绑定到一个地址,除非存在活动连接。 在Windows上,这是认行为。 在Windows上,SO_REUSEADDR允许您另外绑定多个套接字到相同的地址。 看到这里和这里更多。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐