#pragma comment(lib,"ws2_32.lib")
从本质上说,完成端口模型要求创建一个 windows 完成端口对象,该对象通过指定数量的线程,对重叠 I/O 请求进
行管理,以便为已经完成的重叠 I/O 请求提供服务。
首先要创建一个 I/O 完成端口对象,用它面向任意数量的套接字句柄,管理多个 I/O 请求。调用以下函数创建
完成端口对象:
HANDLE CreateIoCompletionPort(
HANDLE FileHandle,// 同 IOCP 关联在一起的套接字句柄
HANDLE ExistingCompletionPort,// IOCP 句柄
ULONG_PTR CompletionKey, // 完成健
DWORD NumberOfConcurrentThreads // 在 IOCP 上,同时允许执行的线程数量
);
该函数有两个作用:
(1)创建一个完成端口对象
(2)将一个句柄同完成端口关联到一起
然后就要创建一定数量的工作者线程,以便在套接字的 I/O 请求投递给完成端口后,为完成端口提供服务。写
文字描述很烦,还是看代码吧:
// NetServer3.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "NetServer3.h"
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <iostream>
using namespace std;
/**///////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/**///////////////////////////////////////////////////////////////////////////
// 单句柄数据
typedef struct tagPER_HANDLE_DATA
评论0
最新资源