完成端口与套接字绑定的OVERLAPPED结构释放问题

原创 2006年06月01日 02:47:00
2楼  kingzai   (stevenzhu) 五星用户 该版得分小于等于200000分,大于100000分  回复于 2005-01-09 13:58:59  得分 30

如何正确地关闭I/O完成端口一—特别是同时运行了一个或多个线程,在几个不同的套接字上执行I/O操作的时候。要避免的一个重要问题是在进行重叠I/O操作的同时,强行释放—个OVERLAPPED结构。要想避免出现这种情况,最好的办法是针对每个套接字句柄,调用closesocket函数。任何尚未进行的重叠I/O操作都会完成。—旦所有套接字句柄都已关闭。便需在完成端口上,终止所有工作者线程的运行。要想做到这一点,需要使用  
  PostQueuedCompletionStatus函数,向每个工作者线程都发送—个特殊的完成数据包。该函数会指示每个线程都“立即结束并退出”.下面是PostQueuedCompletionStatus函数的定义:    
  BOOL   PostQueuedCompletionStatus(  
          HANDLE   CompletlonPort,  
          DW0RD     dwNumberOfBytesTrlansferred,  
          DWORD     dwCompletlonKey,  
  LPOVERLAPPED   lpoverlapped,  
  );  
          其中,CompletionPort参数指定想向其发送一个完成数据包的完成端口对象。而就dwNumberOfBytesTransferred,dwCompletionKey和lpOverlapped这三个参数来说.每—个都允许我们指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数。这样—来。—个工作者线程收到传递过来的三个GetQueuedCompletionStatus函数参数后,便可根据由这三个参数的某一个设置的特殊值,决定何时应该退出。例如,可用dwCompletionPort参数传递0值,而—个工作者线程会将其解释成中止指令。一旦所有工作者线程都已关闭,便可使用CloseHandle函数,关闭完成端口。最终安全退出程序。

相关文章推荐

AcceptEx函数的示例代码

2. 关于AcceptEx  使用此函数时,要包含头文:Mswsock.h,同时要链接:Mswsock.lib。可在源程序中加入下面的语句,这样在编译时,将自动链接Mswsock.lib。  #pra...

AcceptEx函数与完成端口的结合使用例子

这是在学《Windows网络编程(第二版)》第六章时制作的一个例子由于书中没有给出简洁的例子,本人在学这里时就费了很多时间。现在把完成的代码贴出来,供大...

Linux网络编程——端口复用(多个套接字绑定同一个端口)

在《绑定( bind )端口需要注意的问题》提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 )。 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了...

套接字绑定失败:已被占用问题

bind API 函数来绑定一个地址(一个接口和一个端口)到一个套接字端点。可以在服务器设置中使用这个函数,以便限制可能有连接到来的接口。也可以在客户端设置中使用 这个函数,以便限制应当供出去的连接所...
  • xk_qq
  • xk_qq
  • 2012年05月22日 09:05
  • 4624

accept()返回的套接字绑定哪个端口 新旧套接字的联系

摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的。它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户...

网络子系统76_套接字绑定

// 绑定套接字到地址 // 步骤: // 1.根据用户空间的文件描述符查找socket描述符 // 2.复制地址信息到内核空间 // 3.由具体的协议族完成绑定 1.1 SYSCALL_DEF...

Android:关于Android Studio连接手机的各种问题 & 解决“通常每个套接字地址(协议/网络地址/端口)只允许使用一次(10048)”的问题。

一、解决“通常每个套接字地址(协议/网络地址/端口)只允许使用一次(10048)”的问题。 二、adb重启命令...

Delphi实现winsock编程之二(套接字的建立绑定侦听以及连接)

以面向连接的网络协议为例,使用套接字进行通信的过程如下图 先总结服务器端步骤 1建立套接字 2绑定连接 3端口侦听 4调用accept等待客户端连接 5如...

UNIX网络编程——套接字选项(心跳检测、绑定地址复用)

[cpp] view plaincopyprint? /* 设置套接字选项周期性消息检测连通性 心跳包、 心博。主要用于长连接。   * 参数:套接字, 1或0开启, ...
  • rethyx
  • rethyx
  • 2014年02月25日 21:53
  • 476

UNIX网络编程——套接字选项(心跳检测、绑定地址复用)

/* 设置套接字选项周期性消息检测连通性 心跳包、 心博。主要用于长连接。 * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 */ void setKeepAlive( ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:完成端口与套接字绑定的OVERLAPPED结构释放问题
举报原因:
原因补充:

(最多只允许输入30个字)