我可以将 accept() 与 IOCP 一起使用吗?
Can I use accept() with IOCP?
我想使用 IOCP 来处理数百个客户端连接。使用 accept()
接受这些连接是否有问题,或者我应该使用 WSAAccept()
?
应该没有问题。但也有可能,因为 berkley 和 WSA 接口不应该混用。我在一个项目中混合了套接字和 WSASelect 没有问题,因为返回的 SOCKET
句柄是相同的,无论您使用哪个命令获取它。
但是恕我直言,在不必要的地方混合它是一种不好的风格。所以如果你已经使用了 WSA 风格,请坚持使用它。
您还应该看看 AcceptEx() 函数。
使用 AcceptEx()
的一个很好的理由是避免使用另一个只被唤醒来处理新连接的线程。
不过要小心 AcceptEx()
,理想情况下,不要使用可用的 "accept and read data" 选项,因为这使得通过打开连接而不发送数据和避免潜在的 DOS 攻击所需的代码非常复杂。
我想使用 IOCP 来处理数百个客户端连接。使用 accept()
接受这些连接是否有问题,或者我应该使用 WSAAccept()
?
应该没有问题。但也有可能,因为 berkley 和 WSA 接口不应该混用。我在一个项目中混合了套接字和 WSASelect 没有问题,因为返回的 SOCKET
句柄是相同的,无论您使用哪个命令获取它。
但是恕我直言,在不必要的地方混合它是一种不好的风格。所以如果你已经使用了 WSA 风格,请坚持使用它。
您还应该看看 AcceptEx() 函数。
使用 AcceptEx()
的一个很好的理由是避免使用另一个只被唤醒来处理新连接的线程。
不过要小心 AcceptEx()
,理想情况下,不要使用可用的 "accept and read data" 选项,因为这使得通过打开连接而不发送数据和避免潜在的 DOS 攻击所需的代码非常复杂。