繁体   English   中英

我应该使用AcceptEx()还是WSAAccept()?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM