Socket的几种模式

阻塞模式

是socket的缺省方式,也是最常用的方式,即函数阻塞直到调用完毕。可参见前面的例子

可能造成阻塞的函数有:connect()、accept()、读写函数、select()、poll()、gethostbyname()等。

 

非阻塞模式

程序调用可能造成阻塞的函数时,如果会发生阻塞,这些函数返回-1并将errno设置为EAGAIN或EWOULDBLOCK,程序可继续向下运行。可能阻塞的函数对应的任务完成,则再次调用该函数时就返回0表示运行结束。

非阻塞模式可以避免程序死锁,但是需要程序不断检查各个可能阻塞的函数的状态,当一个应用程序使用了非阻塞模式的套接字,它需要使用一个循环来不听的测试是否一个文件描述符有数据可读(称做polling)。应用程序不停的polling内核来检查是否I/O操作已经就绪。这将是一个极浪费CPU资源的操作,因此不能实际应用。一般非阻塞模式是与同步I/O模式共同使用的。

进入非阻塞模式的方法,请参见函数说明

 

I/O多路复用(同步I/O模式)

使用select()、poll()等函数实现对多个socket的同步I/O操作。它能同时等待多个socket描述符,而这些socket描述符其中的任意一个进入读就绪/写就绪/出错状态,select()函数就可以返回。请参见函数说明程序

 

信号驱动I/O

 

 

异步I/O

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值