我们在Windows上有一个服务器应用程序无法在本地端口(3050)上绑定,从而导致错误WSAEADDRINUSE - Address already in use.
但是,我已经使用SysInternals实用程序( TCPView )检查过没有进程正在侦听该端口。
请说明这背后的原因以及解决此问题的任何解决方法。
提前致谢。
答案 0 :(得分:5)
在两种情况下会出现错误情况:
1)另一个套接字已绑定到该地址
2)最近关闭了绑定到该地址的套接字。
在第一种情况下,我想问题是你在同一个程序中绑定了两次该端口号。
在第二种情况下,我认为您的程序的上一次运行在测试之前退出或崩溃不到120秒。当你运行TCPView时,120秒已经过去了。
答案 1 :(得分:2)
如果您有权访问底层C ++代码,则可以在调用setsockopt()
之前在套接字上使用SO_REUSEADDR
参数bind()
。这将允许您的程序重新绑定到给定端口,即使前一个程序中有一个套接字运行'延迟'。