我正在使用 Overlapped IO,我想使用阻塞调用来接受客户端连接,就像我使用普通的accept()
. 我不确定,但我认为这AcceptEx()
不会阻塞,而WSAAccept()
会阻塞。那么WSAAccept()
类似于accept()
?
问问题
2420 次
2 回答
3
accept()
WSAAccept()
除非您习惯ioctlsocket
将侦听器设置为非阻塞模式,否则两者都会阻塞。因此,您可以在阻塞时使用其中任何一个来接受客户端。
但是,如果您使用在侦听器上WSAEventSelect
注册事件,您将获得更多控制权。FD_ACCEPT
当客户准备好接受无阻塞时,您的事件将被设置。
然后,您可以将此事件与超时或其他事件结合起来,如果您想在调用WaitForMultipleObjectsEx
.
于 2015-02-25T14:44:14.633 回答
1
为什么要使用阻塞呼叫?
如果您使用 I/O 完成端口,那么处理连接建立的最佳方法是使用连接AcceptEx()
而不是等待数据与连接。这样做的原因是 usingAcceptEx()
意味着您不需要单独的线程来处理连接建立(即正常的“接受循环”),这减少了不必要的上下文切换。
如果连接连接但不发送数据,则“接受和读取数据”选项AcceptEx()
可能会使您面临拒绝服务攻击,除非您添加一个破坏了使用目的的管家线程,否则很难防范它AcceptEx()
。地方...
于 2015-02-25T22:26:58.783 回答