IOCP中该函数是阻塞的还是非阻塞的
解决方案 »
- 如何以第三方的身份关闭TCP 和 UDP 网络连接?
- CEdit控件背景透明
- 我写了一堆画圆的代码就是不会怎么填充 教教我那 谢谢
- 求助:FindConnectionPoint DIID_HTMLDocumentEvents2 总为空
- 怎么在VS2005中建一个API程序?越详细越好,谢谢
- 高手请进:如何获取wlan和gprs的信号强度
- 请朋友们帮帮我这个菜鸟吧!!!谢谢了
- 谁知道在vc中如何让代码自动缩进??有个快捷键我一时想不起来了!
- 刚开始用opencv编程序,弱问一下...
- 为什么给进度条控件设置颜色没有效果
- 对话框程序运行后任务栏没有标题名
- 3月20号腾讯深圳现场面试简单经过,给大家一点点借鉴或请大家评论下
msdn上说:
A socket in default mode (blocking) will block until a connection is present when an application calls WSAAccept and no connections are pending on the queue.A socket in nonblocking mode (blocking) fails with the error WSAEWOULDBLOCK when an application calls WSAAccept and no connections are pending on the queue. After WSAAccept succeeds and returns a new socket handle, the accepted socket cannot be used to accept any more connections. The original socket remains open and listens for new connection requests.
{
SThreadParam* pAcceptParam = (SThreadParam*)pParam;
CIOCPServer*pIOCPServer = pAcceptParam->pIOCPServer;
SOCKET ListenSocket = pAcceptParam->sSocket;
HANDLE hCompletionPort = pAcceptParam->hCompletionPort;
BOOL bExit = FALSE;
while (!bExit)
{
// 处理连接请求
sockaddr saClient;
int iClientSize = sizeof(saClient);
SOCKET AcceptSocket = WSAAccept(ListenSocket, &saClient, &iClientSize, NULL, NULL);
if ( AcceptSocket == SOCKET_ERROR )
{
// 异常错误事件
pIOCPServer->OnError(INVALID_CLIENT_ID, WSAGetLastError());
continue;
}
以上是原程序,别人的代码,我猜可是是阻塞的,因为没有注册网络事件,谁帮我来肯定一下
iocp中如果需要使用异步accept,需要用到AcceptEx,这是Mswsock.dll种提供的。其使用方法见msdn
参数创建的时候是blocking还是nonblocking的,
那个很炫的while(!bExit)里面,WSAAccept不过是为接收的连接做了一个条件检查,还是阻塞的。