代码之家  ›  专栏  ›  技术社区  ›  Spook

将IOCP与send()和recv()一起使用

  •  2
  • Spook  · 技术社区  · 9 年前

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

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

    我想知道是否还有任何方法可以使用IOCP 发送() 记录() ? 还是我应该研究其他方法?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Ben Voigt    9 年前

    我还需要使用相同的函数来向客户端发送数据和从客户端接收数据

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

    如果您的服务器是I/O绑定的,那么 WSAAsyncSelect 和/或 WSAEventSelect 工作得很好(并且省去了多线程的麻烦)。只有对于计算绑定的服务,IOCP才有价值,因为它们将工作项分配给一个可用的线程,因此同时的请求可以在多个处理器内核上旋转并进行计算。

    WSAPoll 是另一种选择。

    推荐文章