Chinaunix首页 | 论坛 | 博客
  • 博客访问: 214097
  • 博文数量: 64
  • 博客积分: 2010
  • 博客等级: 上尉
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-25 19:03
文章分类

全部博文(64)

文章存档

2013年(1)

2012年(9)

2011年(25)

2010年(7)

2009年(16)

2008年(6)

分类: C/C++

2011-08-16 20:29:15

 
 
1.先要创建一个完成端口。
2.创建一个或多个工作线程,以便在I/O请求投递给完成端口后,为完成端口提供服务。
3.将套接字与完成端口关联。
 
根据windows 网络编程一书:构架基本框架如下:
1.创建一个完成端口,第4个参数为0.它指定在完成端口上每个处理器一次只允许执行一个工作线程。
2.判断系统的处理器个数。
3.根据处理器个数和可以预见的工作线程,提供一定数据的工作线程。
4.建立监听套接字,在指定端口监听连接请求。
5.根据情况用accept接受连接请求。
6.创建一个数据结构,用于容纳单句柄数据,同时在结构中存入接受的套接字句柄。
7.将accpet返回的新套接字句柄同完成端口关联到一起。通过CompletionKey参数,将单句柄数据结构传递给CreateIoCompletionPort。
8.在已接受的连接上I/O操作。
 
 
自己理解:
在完成端口程序中,要理解两个重要概念:单句柄数据,单I/O操作数据
单句柄数据:与特定套接字句柄关联在一起的数据。当在监听端口上收到连接请求后,就获得一个套接字句柄,这时要把套接字句柄和完成端口关联起来,要用到单句柄数据,这个单句柄数据包含套接字句柄,以及与这个套接字有关的信息。
单I/O数据:这个数据要包括的第一个数据应该是一个OVERLAPPED结构,然后要包括进行WSARecv和 WASSend等操作时的数据,以及指示操作类型的字段。
 
 
 
阅读(850) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~