Windows套接字I/O模型之套接字模式


先来说一下为什么需要I/O模型,要解释这个问题,首先我们得了解一下套接字模式,那么什么是套接字模式,套接字模式显得有点太专业了,让人生畏,我们就来通俗一点的解释一下什么是套接字模式,模式,顾名思义就是运转的方式,所以,套接字模式就可以通俗的理解为套接字运作的方式,那套接字运作的方式都有什么呢?下面给出了WinSock下的套接字模式(套接字运作方式):

1、阻塞模式(阻塞的运作方式)

套接字在创建是,缺省的是以阻塞的方式运作,即当我们对套接字进行某些操作时,比如读取操作(recv函数的调用会时程序进入到等待状态,recv函数在读取数据时,若数据缓冲区中没有数据,则它会一直挂死在那里,直到有数据到来时,他才会返回)就会阻塞程序进一步的执行。如果我们编写的程序只有一个线程时,那么就只能处理一个套接字,所以,这样的程序效率是非常的低的。如果我们采用多线程的,一个线程处理一个套接字,但是这样的方式会给编程带来很多的不便。所以,在实际的开发中,我们用的最多的还是下面要介绍的非阻塞模式。

2、非阻塞模式(非阻塞的运作方式)

非阻塞套接字使用起来是比较复杂的,但是,它却有许多优点。应用程序可以通过调用ioctlsocket函数显式地让套接字工作在非阻塞模式下。如下代码:

   u_long ul = 1 ;
   SOCKET s = socket(AF_INET,SOCK_STREAM, 0) ;
   ioctlsocket(s, FIONBIO,(u_long *)&ul) ;

但是,工作在非阻塞模式下的套接字经常会出错(返回错误代码WSAEWOULDBLOCK),因为在非阻塞模式下,WinSock调用将会立即返回(即便套接字正处于监听/发送数据/接收数据,还没等到监听/发送数据/接收数据成功,就立即返回),这样就会造成调用的失败。通常情况下,会进行某个调用多次,直到调用成功返回为止。看到这儿的话,我们就会发现非阻塞的套接字太容易出问题了,怎么解决这写问题呢,所以套接字I/O模型就应需所生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值