2011-02-12 73 views
1

我有一个侦听端口的小型TCP服务器。在调试时,我通常会按CTRL-C服务器来终止进程。“使用中的地址”与Windows和Linux上的bind()之间的区别 - errno = 98

在Windows上,我可以快速重启服务,套接字可以被反弹。在Linux上我有绑定之前等待几分钟()成功

返回当bind()的失败则返回错误号= 98,地址在使用中。

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

我最好的猜测是Linux的等待,直到所有可能的客户已经检测到旧插座允许创建新的套接字之前打破。它可以做到这一点的唯一方法就是等待他们超时

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

回答

3

你想使用Linux上的插座上的SO_REUSEADDR选项的方式。相关的手册页是socket(7)。这是其使用的exampleThis question解释发生了什么。

Here's这个答案的重复。

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

+0

嘿感谢一堆,不知道寻找SO_REUSEADDR。现在我的信息很丰富。谢谢! – stuck 2011-02-12 18:08:26

相关问题