可以在多个线程中使用WSAEventSelect()来增加套接字限制吗
Can WSAEventSelect() be used in multiple threads to increase sockets limit?
本文介绍了以下内容:
Windows事件机制(例如WaitForMultipleObjects())只能一次等待64个事件对象。Winsock 2提供WSAEventSelect()函数,它允许您使用Windows的事件机制以等待套接字上的事件。因为它使用Windows的事件机制,一次只能等待64个套接字上的事件。如果如果要一次等待超过64个Winsock事件对象,则需要使用多个线程,每个线程等待的线程数不超过插座。
这个说法正确吗?我想监视300个套接字,看看它们是否有待读取的挂起数据,所以我可以只创建5个线程并使用WSAEventSelect()
来完成吗?
回答您的问题-是的,您引用的语句是正确的。各种WaitFor
函数一次最多只能等待64个对象。因此,要同时等待300个套接字事件,您必须等待5个线程,其中4个线程分别等待64个事件,第5个线程等待44个事件。
如果您想编写可伸缩套接字代码,则根本不应该使用可等待套接字事件。请改用I/O完成端口。您可以将多个套接字与单个IOCP句柄相关联,并让多个线程(最好是每个CPU核一个)等待来自该单个IOCP的通知。使用启用IOCP的套接字函数(WSAConnect()
、WSAAcept()
、WSARead()
、WSASend()
等),并让它们在工作完成时通知您。这允许您以最小的开销并行处理多个套接字。
有关更多详细信息,请参阅本文:
Windows Sockets 2.0:使用完成端口编写可扩展Winsock应用程序
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 非更新套接字消息
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 在网络套接字计时器滴答后增加asio短读错误
- 增加 UDP 套接字中的接收缓冲区
- 可以在多个线程中使用WSAEventSelect()来增加套接字限制吗