[英]Should I use AcceptEx() or WSAAccept()?
我正在使用Overlapped IO,我想使用阻塞调用接受客户端连接,就像我使用普通的accept()
。 我不确定,但我认为AcceptEx()
不会阻塞,而WSAAccept()
会阻止。 那么WSAAccept()
类似于accept()
吗?
除非你使用ioctlsocket
将监听器设置为非阻塞模式,否则accept()
和WSAAccept()
都会阻塞。 因此,您可以使用其中任何一个在阻止时接受客户端。
但是,如果你使用,你会获得更多的控制WSAEventSelect
注册对事件FD_ACCEPT
你的听众。 当客户端准备好被接受而没有阻止时,您的事件将被设置。
然后,您可以将此事件与超时或其他事件相结合,如果要在WaitForMultipleObjectsEx
调用中取消侦听(例如,在应用程序退出时),则可以发出信号。
为什么要使用阻止呼叫?
如果您正在使用I / O完成端口,那么处理连接建立的最佳方法是使用AcceptEx()
而不是等待数据连接。 这样做的原因是使用AcceptEx()
意味着您不需要单独的线程来处理连接建立(即正常的“接受循环”),这减少了不必要的上下文切换。
如果连接连接并且不发送数据,则AcceptEx()
的“接受和读取数据”选项可以打开拒绝服务攻击,除非您添加一个违反使用目的的管家线程,否则很难防范它AcceptEx()
首先......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.