我可以将 accept() 与 IOCP 一起使用吗?

Can I use accept() with IOCP?

我想使用 IOCP 来处理数百个客户端连接。使用 accept() 接受这些连接是否有问题,或者我应该使用 WSAAccept()?

应该没有问题。但也有可能,因为 berkley 和 WSA 接口不应该混用。我在一个项目中混合了套接字和 WSASelect 没有问题,因为返回的 SOCKET 句柄是相同的,无论您使用哪个命令获取它。

但是恕我直言,在不必要的地方混合它是一种不好的风格。所以如果你已经使用了 WSA 风格,请坚持使用它。

您还应该看看 AcceptEx() 函数。

使用 AcceptEx() 的一个很好的理由是避免使用另一个只被唤醒来处理新连接的线程。

不过要小心 AcceptEx(),理想情况下,不要使用可用的 "accept and read data" 选项,因为这使得通过打开连接而不发送数据和避免潜在的 DOS 攻击所需的代码非常复杂。