不同线程上的accept()出现错误10093

Error 10093 on accept() on different thread

本文关键字:错误 10093 accept 线程      更新时间:2023-10-16

我创建了一个while循环,其中包含winsock-accept()方法,但每次循环时都会抛出错误10093(WSAData尚未初始化)。WSAData是在启动接受线程的主线程中初始化的。

我不知道这是否与线程有关。启动WSAData和线程的代码如下:

iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
    printf("WSAStartup failed with error: %dn", iResult);
    return 1;
}
// Things in between (bind, listen...)
std::thread acceptThread(Accept);

这是我制作的Accept()方法(好吧,实际调用的Accept方法):

SOCKET temp = accept(ListenSocket, NULL, NULL);

之后,我检查"温度",这就是错误发生的时候

WSAStartup之所以能工作,是因为它没有进入if.

套接字没有线程亲和性,因此您可以在一个线程中自由创建套接字,并在另一个线程使用它。您不需要在每个线程的基础上调用WSAStartup()。如果accept()报告WSANOTINITIALISED,那么WSAStartup()实际上没有被预先调用,或者WSACleanup()被提前调用。