擅长:python、mysql、java
<p>更新:</p>
<p>我把它扔进代码里,现在它好像在工作。</p>
<pre><code>if(::connect(s_, (sockaddr *) &addr, sizeof(sockaddr)))
{
int err = WSAGetLastError();
if(err == 10048) //if socket in user error, force kill and reopen socket
{
closesocket(s_);
WSACleanup();
WSADATA info;
WSAStartup(MAKEWORD(2,0), &info);
s_ = socket(AF_INET,SOCK_STREAM,0);
setsockopt(s_,SOL_SOCKET,SO_REUSEADDR,(char*)&x,sizeof(BOOL));
}
}
</code></pre>
<p>基本上,如果遇到10048错误(socket正在使用),只需关闭socket,调用cleanup,然后重新启动WSA,重置socket及其sockopt</p>
<p>(可能不需要最后一个sockopt)</p>
<p>我以前一定错过了WSACleanup/WSAStartup调用,因为closesocket()和socket()确实被调用了</p>
<p>这个错误每4000ish个调用只发生一次。</p>
<p>我很好奇这是为什么,尽管这似乎解决了它。
如果有人对这个问题有什么意见,我很想听听</p>