- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在重写我的软件中的代码以支持多个连接,直到现在,我都使用 select。为了让我的软件更便携,我改用了 WSAPoll。在WSAPoll中发现了一个Microsoft不会解决的错误后,我想更改为建议的WSAEventSelect。由于 WSAWaitForMultipleEvents 最多只支持 64 个事件,并且出于节省资源的原因,我想将一个 hEvent 连接到多个套接字。我现在的问题是,是
rc = WSAEventSelect(s1, hEventObject1, FD_READ);
rc = WSAEventSelect(s2, hEventObject1, FD_READ);
合法的操作?请仅在您有确凿的事实而不是意见时回答。或者你以前自己也用过这种方式。另外,出于某些原因我不想使用 boost(例如 1.52 在套接字部分有一个错误(有趣的是几乎与 WSAPoll 相同的错误))。也请不要“你为什么不……”
最佳答案
单个等待事件不应与多个套接字相关联。每个套接字都应该使用它自己的单独事件。否则,如果多个套接字要使用同一个事件,当该事件发出信号时,您将不知道哪个套接字满足了等待。即使可以,当调用 WSAEnumNetworkEvents()
以获取事件数据时,也会出现竞争条件,因为它会重置可能已由另一个套接字设置的事件。所以您可能会丢失事件。
要绕过 64 个句柄的限制,请执行 WaitForMultipleObjects()
文档中所说的操作:
To wait on more than MAXIMUM_WAIT_OBJECTS handles, use one of the following methods:
• Create a thread to wait on MAXIMUM_WAIT_OBJECTS handles, then wait on that thread plus the other handles. Use this technique to break the handles into groups of MAXIMUM_WAIT_OBJECTS.
• Call RegisterWaitForSingleObject to wait on each handle. A wait thread from the thread pool waits on MAXIMUM_WAIT_OBJECTS registered objects and assigns a worker thread after the object is signaled or the time-out interval expires.
否则,请改用 WSAAsyncSelect()
,让它在任何给定套接字满足请求条件时通过窗口消息通知您。
关于c++ - WSAEventSelect,一个事件,多个套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19936131/
在我的套接字服务器中,我使用 WSAEventSelect() 和 WSAEnumNetworkEvents() 来检测 FD_ACCEPT 和 FD_CLOSE 事件。 这是我的代码的简化版本: H
这article说如下: The Windows event mechanism (e.g. WaitForMultipleObjects()) can only wait on 64 event o
我正在重写我的软件中的代码以支持多个连接,直到现在,我都使用 select。为了让我的软件更便携,我改用了 WSAPoll。在WSAPoll中发现了一个Microsoft不会解决的错误后,我想更改为建
我对属于多线程套接字服务器的一段遗留 c++/winsock 代码有疑问。该应用程序创建一个线程来处理来自客户端的连接,通常一次有几百个连接。它通常可以毫无问题地运行数天(连续),然后突然停止接受连接
我用 WSAEventSelect 开发了一个回显服务器。它只允许 64 个连接。我该怎么办。 最佳答案 这听起来很像 MAXIMUM_WAIT_OBJECTS 限制,即 64。函数 WaitForM
我是一名优秀的程序员,十分优秀!