【发布时间】:2015-02-20 11:50:33
【问题描述】:
这个article 说如下:
Windows 事件机制(例如 WaitForMultipleObjects())只能 一次等待 64 个事件对象。 Winsock 2 提供 WSAEventSelect() 函数让您使用 Windows 的事件机制 等待套接字上的事件。因为它使用了 Windows 的事件 机制,您一次只能等待 64 个套接字上的事件。如果 你想一次等待超过 64 个 Winsock 事件对象,你 需要使用多个线程,每个等待不超过64个 插座。
这个说法正确吗?我想监控 300 个套接字以查看它们是否有待读取的数据,那么我可以只创建 5 个线程并使用WSAEventSelect() 来执行此操作吗?
【问题讨论】:
-
@IInspectable 所以我的问题的答案是否定的,或者您的意思是 IOCP 是一种更好的方法?
-
@joseph_m 请参阅我之前链接的问题this answer,它解释了如何绕过 64 个套接字限制。
-
对WaitForMultipleObjects 的一次调用仅限于
MAXIMUM_WAIT_OBJECTS对象。可扩展的网络应用程序通常使用I/O Completion Ports 编写。
标签: c++ windows sockets winapi