当前位置: 技术问答>linux和unix
非阻塞socket该如何使用。。。
来源: 互联网 发布时间:2015-12-17
本文导语: 非阻塞socket在select的时候还不是又阻塞住了,还不变成了阻塞socket了; 那它到底该怎么用呢? 怎么没有触发机制的? | 非阻塞socket和select一起在Multiplexing时很有用; 比如同时监听多个socket,如...
非阻塞socket在select的时候还不是又阻塞住了,还不变成了阻塞socket了;
那它到底该怎么用呢? 怎么没有触发机制的?
那它到底该怎么用呢? 怎么没有触发机制的?
|
非阻塞socket和select一起在Multiplexing时很有用;
比如同时监听多个socket,如果用阻塞socket直接读写一个socket的时候会影响到其他socket,而通过非阻塞socket+select,则可以一次监听所有socket的情况;
详细介绍请参考UNP3有关select的章节
比如同时监听多个socket,如果用阻塞socket直接读写一个socket的时候会影响到其他socket,而通过非阻塞socket+select,则可以一次监听所有socket的情况;
详细介绍请参考UNP3有关select的章节
|
>>我想知道非阻塞对于阻塞来说有什么优点,还有在select的时候不是又阻塞了,那么它到底该>>如何应用呢。。。
非阻塞模式对于没有数据读或写缓冲区不够的情况下立刻返回,而对于阻塞模式则是等待,也不能说这是优点,根据你的需求选择使用.
select的时候是阻塞了,但他可以等待一定的时间,而不是永远等待,这样可以利用他来设置超时时间.
非阻塞模式对于没有数据读或写缓冲区不够的情况下立刻返回,而对于阻塞模式则是等待,也不能说这是优点,根据你的需求选择使用.
select的时候是阻塞了,但他可以等待一定的时间,而不是永远等待,这样可以利用他来设置超时时间.
|
尽量不要用非阻塞
|
#include
#include
int fcntl(int fd, int cmd);
设置非阻塞IO
int flags;
if ((flags = fcntl(fd, F_GETFL, 0))
#include
int fcntl(int fd, int cmd);
设置非阻塞IO
int flags;
if ((flags = fcntl(fd, F_GETFL, 0))