gpt4 book ai didi

c - Windows - 同时等待事件和套接字

转载 作者:可可西里 更新时间:2023-11-01 14:48:25 25 4
gpt4 key购买 nike

我正在编写 Win32-API C 代码,它需要等待新的 TCP 连接,而另一端可以随时被任何其他进程/线程关闭。

因此,我需要以某种方式在停止事件上使用 WaitForSingleObject 并同时使用 WSAAccept 等待连接。

我在套接字和句柄上尝试了 WaitForMultipleObjects,但新连接不会触发该函数(套接字上的 WaitForSingleObject 也不会在新连接上触发)。

有什么想法吗?

最佳答案

您需要使用 WSAWaitForMultipleEvents .对于套接字,这里有一些伪代码:

HANDLE hEvent[1];
hEvent[0] = WSACreateEvent();
WSAEventSelect(hSocket, hEvent[0], FD_READ | FD_WRITE);

while (WSAWaitForMultipleEvents(...)) {
if (WSAEnumNetworkEvents(...)) { // Multiple events max exist
if (... & FD_ACCEPT) {
}
if (... & FD_WRITE) {
}
....
}
}

如果您使用多个事件(例如,一个停止事件来通知线程停止),请使用 WSAWaitForMultipleEvents 的返回值来确定发出信号的事件(就像您对 WaitForMultipleObjects 所做的那样)。

关于c - Windows - 同时等待事件和套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41743043/

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