c++ - 将 IOCP 与 send() 和 receive() 一起使用

标签 c++ sockets iocp

我正在尝试找出处理与 C++ TCP 服务器的多个连接的最佳方法。我偶然发现了 epoll(),但遗憾的是它仅适用于 Linux,而我在 Windows 上执行所有操作。

经过一些研究,在 Windows 上处理套接字的最佳方法似乎是使用 I/O 完成端口。我想使用它们,但是客户端应用程序使用 send()recv() (我无法更改它),这意味着我还需要使用相同的函数来向客户端发送和接收数据。这些函数似乎不用于 IOCP(而是使用 WSASend()/WSARecv())。

我想知道是否还有办法将 IOCP 与 send()recv() 结合使用?或者我应该研究其他方法?

最佳答案

I also need to use the same functions to send to and receive data from the client

这是不正确的。客户端不知道如何将数据传入和传出 TCP 连接,无论哪种方式,完全相同的 TCP 段都会通过网络发送。

如果您的服务器受 I/O 限制,那么 WSAAsyncSelect 和/或 WSAEventSelect 可以很好地工作(并为您省去多线程的麻烦)。仅对于计算密集型服务才值得使用 IOCP,因为它们将工作项分发到可用线程,以便并发请求可以启动并在多个处理器核心上进行计算。

WSAPoll 是另一种选择。

关于c++ - 将 IOCP 与 send() 和 receive() 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35234060/

相关文章:

c++ - ((a + (b & 255)) & 255) 和 ((a + b) & 255) 一样吗?

linux - 我对积压的监听系统调用和套接字编程中的连接数的理解是否正确?

ios - 通过套接字连接在iOS上播放音频

c++ - 检测 CancelIoEx 是否同步取消

c++ - glBindMultiTexture 和 glEnableIndexed 的语义?

c++ - 列表迭代器不可取消引用

c++ - 成员函数声明的奇怪错误

python - 如何停止 TCPServer,如何删除 TIME_WAIT 套接字

winapi - CreateFile() 返回 INVALID_HANDLE_VALUE 但 GetLastError() 是 ERROR_SUCCESS

c++ - IO 完成端口初始读取和双向数据