关于不同线程上的accept()的错误10093

时间:2014-04-16 00:51:15

标签: c++ multithreading winsock

我在其中创建了一个带有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。

1 个答案:

答案 0 :(得分:2)

套接字没有线程关联,因此您可以在一个线程中自由创建套接字并在另一个线程中使用它。您无需基于每个线程调用WSAStartup()。如果accept()报告WSANOTINITIALISED,则事先未事先调用WSAStartup(),或者过早调用WSACleanup()