纯重叠io服务器模型

本文介绍了纯重叠IO服务器模型的实现,主要利用OVERLAPPED结构和APC函数,如SleepEx,来实现非阻塞IO。区别于重叠IO与非阻塞IO的概念,该模型在accept操作上使用非阻塞,以允许调用SleepEx,确保APC函数的执行。该模型的缺点在于需要同时处理accept和线程的可调度状态,通过注释非阻塞设置可以对比观察效果。
摘要由CSDN通过智能技术生成

 

基础:套接字重叠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(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值