本来也不是让各种库去用。每种库都有自己的IO方式,不可能有通用的。
那个程序就是一个read的包装,需要提供一个yield,用于与各种库的接口。
typedef int (*T_YIELD)(int socket,int rwflg,int timeout);
T_YIELD get_yield(void);
T_YIELD set_yield(T_YIELD new_yield);
如果需要与IOCP接口,可以增加两个参数:buffer,len。
然后,你自己的程序,就可以直接使用这个函数进行IO了。
至于使用哪个协程哪个异步IO,完全是对应用透明的。
应用软件只需要调用这个东西去获取数据,不需要关心是否协程,是否异步IO。用的哪个库。
比如这个程序,各种模式的服务器都会用到,有时是协程环境,有时不是。
//服务器用,与客户端协商密钥。
int mk_clikey(int socket,ENIGMA2 *tc,u_int *family)
{
ENIGMA2 t;
char buf[100],keybuf[56],cli_k[52],*cp;
int i,len;
int crymode=15;
unsigned short crc,recv_crc;
char addr[16];
cp=getenv("CRYPTFLG");
if(cp && isdigit(*cp)) crymode=atoi(cp)&0xf;
i=0;
*buf=0;
peeraddr(socket,addr);
len=RecvNet(socket,buf,26,15);
。。。。。
在服务器刚刚接通客户端的时候,要求客户端15秒内发送一个数据来。很可能客户端不是一个正常的,是一个攻击,它可能根本不发任何有效数据。为了避免锁死服务器,在协程服务器里边,这期间是yield的。
在非协程服务器,死等15秒。
底层,你用啥库都可以,它不关心也不知道底层用了啥。
【 在 stub 的大作中提到: 】
: 你没懂我的意思,我拿去用,关键各种库不会拿去用啊
--
FROM 221.218.62.*