使用IOCP与send()和recv()

时间:2016-02-05 21:43:39

标签: c++ sockets iocp

我试图找出处理与C ++ TCP服务器的多个连接的最佳方法。我偶然发现了epoll(),但遗憾的是它只适用于Linux,我在Windows上做了一切。

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

我想知道我是否仍然可以通过send()recv()使用IOCP?或者我应该研究其他方法吗?

1 个答案:

答案 0 :(得分:2)

  

我还需要使用相同的功能来发送和接收来自客户端的数据

这是不正确的。客户端不知道如何将数据输入和输出TCP连接,无论是通过网络发送相同的TCP段,都是如此。

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

WSAPoll是另一种选择。