基础:套接字重叠io
客户端: telnet 或者自己随意写一个;
纯重叠实现的服务器模型,基本上就是使用OVERLAPPED和APC函数完成.
APC函数即需要使用alterable状态的函数 , 例 SleepEx.
另外重叠io与非阻塞是2个概念.
下面的代码中使用到了非阻塞io, 仅仅作用在了accept上. 让其不阻塞;
原因是如果阻塞accpet 就没法调用到Sleepex上,那么APC函数将无法被调用,因此使用非阻塞;
这种纯重叠io模型的服务器缺点是既要accept,又要让线程进入alterab;e状态
这个例子同时解释了非阻塞io. 和重叠io : 可以把设置非阻塞的函数注释.看看效果
#include "stdafx.h"
#include "../utils.h"
#define BUFFSIZE 8192
//自定义一块数据. 用于放入OVERLAPPED的Event中,以便传入APC
typedef struct{
SOCKET hSocket;
WSABUF wsabuf;
char buf[BUFFSIZE];
} PER_DATA , *PPER_DATA;
void CALLBACK WriteRouine(IN DWORD dwError,IN DWORD cbTransferred,IN LPWSAOVERLAPPED lpOverlapped,IN DWORD dwFlags);
//读取 - APC
void CALLBACK ReadRoutine(
IN DWORD dwError,
IN DWORD cbTransferred,
IN LPWSAOVERLAPPED lpOverlapped,
IN DWORD dwFlags
){
printf(