gpt4 book ai didi

c++ - 不同线程上的 accept() 错误 10093

转载 作者:行者123 更新时间:2023-11-30 04:05:52 25 4
gpt4 key购买 nike

我创建了一个 while 循环,其中包含 winsock accept() 方法,但每次循环时都会抛出错误 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 中。

最佳答案

套接字没有线程亲和性,所以你可以在一个线程中自由创建一个套接字,并在另一个线程中使用它。您不需要在每个线程的基础上调用 WSAStartup()。如果 accept() 报告 WSANOTINITIALISED 那么要么 WSAStartup() 确实没有事先调用,要么 WSACleanup()被过早调用。

关于c++ - 不同线程上的 accept() 错误 10093,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23097081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com