Обновление:
Я бросил это в код, и теперь, похоже, оно работает.
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));
}
}
Обычно, если вы столкнулись с ошибкой 10048 (используется сокет), вы можете просто закрыть сокет, вызвать очистку и перезапустить WSA, сбросить сокет и его сокет
(последний сокет может не понадобиться)
Должно быть, раньше я пропускал вызовы WSACleanup / WSAStartup, потому что closesocket () и socket () определенно вызывались
эта ошибка возникает только один раз каждые 4000 звонков.
Мне любопытно, почему это может быть, хотя, кажется, это и исправляет.
Если у кого-то есть какие-либо комментарии по этому вопросу, мне было бы очень интересно услышать это