[linux] 将socket设置为非阻塞(non-blocking)

原创 2006年07月24日 19:06:00
有一个非常有迷惑性的做法是:
u_long has = 1;
ioctl(m_sock, FIONBIO , &has);
这个函数会非常无耻的返回你success,但是它实际上很可能什么也没做。

正确的做法应该是使用fcntl:
int flags = fcntl(m_sock, F_GETFL, 0);
fcntl(m_sock, F_SETFL, flags|O_NONBLOCK);

这真是一个隐蔽的问题,折腾了我两天。线程每每停留在send()调用那里,我始终没怀疑到:用ioctl设置FIONBIO成功之后,socket竟然还是阻塞的。

使用O_NONBLOCK方式打开设备文件

open函数 #include int open(const char *pathname, int oflag, ... /* mode_t mode */); open函数用来打开或创建一个文件,...
  • Decisiveness
  • Decisiveness
  • 2015年12月28日 16:58
  • 1031

O_NONBLOCK与O_NDELAY有何不同?

O_NONBLOCK和O_NDELAY所产生的结果都是使I/O变成非搁置模式(non-blocking),在读取不到数据或是写入缓冲区已满会马上return,而不会搁置程序动作,直到有数据或写入完成。...
  • ww2000e
  • ww2000e
  • 2009年08月29日 18:05
  • 16217

[文件I/O]非阻塞 I/O | O_NONBLOCK

[文件I/O]非阻塞 I/O | O_NONBLOCK 转自:http://www.groad.net/bbs/read.php?tid-950.html 系统也可以分为: 低速系统 和 其他。 低...
  • hardworkba
  • hardworkba
  • 2013年08月22日 18:51
  • 837

非阻塞(O_NONBLOCK)

非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。 对于一个给定的描述符两种方法对其指定非阻塞I/O: (1)调用open获得描述符,并指定O_NONBLOCK标志 (2)对已经打开的文件...
  • zhulinfeiba
  • zhulinfeiba
  • 2009年12月15日 15:05
  • 10351

O_NONBLOCK与O_NDELAY有何不同

O_NONBLOCK和O_NDELAY所产生的结果都是使I/O变成非阻塞模式(non-blocking),在读取不到数据或是写入缓冲区已满会马上return,而不会阻塞等待。 它们的差别在于:在...
  • qilu0882
  • qilu0882
  • 2014年11月10日 14:51
  • 2414

linux—FIFO的使用与非阻塞标志(O_NONBLOCK)的影响

FIFO文 #include #include int mkfifo( const char*pathname, mode_t mode); 参数: pathname:FIFO的路径名+...
  • erlian_beijing
  • erlian_beijing
  • 2015年06月30日 17:32
  • 1843

O_NONBLOCK,fcntl 非阻塞io读取键盘鼠标

1.fcntl  #include #include  int fcntl(int fd, int cmd, ... /* arg */ );         The fil...
  • qq_24373811
  • qq_24373811
  • 2016年08月29日 20:14
  • 533

Linux 设备驱动--- 阻塞型字符设备驱动 --- O_NONBLOCK --- 非阻塞标志

阻塞:           在设计简单字符驱动程序时,要注意一个重要问题.           当一个设备无法立刻满足用户的读写请求时应当如何处理?           例如:调用 read 时...
  • yikai2009
  • yikai2009
  • 2013年03月09日 14:24
  • 7343

服务器编程心得(四)—— 如何将socket设置为非阻塞模式

1. windows平台上无论利用socket()函数还是WSASocket()函数创建的socket都是阻塞模式的: SOCKET WSAAPI socket( _In_ int af, ...
  • analogous_love
  • analogous_love
  • 2016年11月04日 13:11
  • 11203

code to solve "SOCK_NONBLOCK" and "O_NONBLOCK" undefined problem in linux

#if defined(SOCK_NONBLOCK)         return ::socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TC...
  • zjnig711
  • zjnig711
  • 2011年01月18日 05:09
  • 2175
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[linux] 将socket设置为非阻塞(non-blocking)
举报原因:
原因补充:

(最多只允许输入30个字)