我在其中创建了一个带有winsock accept()方法的while循环,但每次循环时它都会抛出错误10093(WSAData尚未初始化)。 WSAData在启动接受线程的主线程中初始化。
我不知道这是否与线程有关。启动WSAData和线程的代码是:
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}
// Things in between (bind, listen...)
std::thread acceptThread(Accept);
这是我所做的Accept()方法(嗯,实际调用的accept方法):
SOCKET temp = accept(ListenSocket, NULL, NULL);
之后我检查“temp”,那是发生错误的时候
WSAStartup确实有效,因为它没有进入if。
答案 0 :(得分:2)
套接字没有线程关联,因此您可以在一个线程中自由创建套接字并在另一个线程中使用它。您无需基于每个线程调用WSAStartup()
。如果accept()
报告WSANOTINITIALISED
,则事先未事先调用WSAStartup()
,或者过早调用WSACleanup()
。