现在的位置: 首页 > 综合 > 正文

fcntl设置文件描述符

2013年08月06日 ⁄ 综合 ⁄ 共 1268字 ⁄ 字号 评论关闭

How would I put my socket in non-blocking mode?
From: Andrew Gierth (andrew@erlenstar.demon.co.uk
):

 

Technically,
fcntl(soc, F_SETFL, O_NONBLOCK) is incorrect since it clobbers all
other file flags. Generally one gets away with it since the other flags
(O_APPEND for example) don't really apply much to sockets. In a
similarly rough vein, you would use fcntl(soc, F_SETFL, 0) to go back
to blocking mode.

To do it right, use F_GETFL to get the current flags, set or clear the O_NONBLOCK flag, then use F_SETFL to set the flags.

And yes, the flag can be changed either way at will.

 

From: Michael Lampkin
Added on: 2002-06-01 00:53:57

Since this is a common question... the follow is sample code showing setting and un-setting for non-blocking on a socket.

Code:

 

 

UNIX环境高级编程会讲得详细一些。详见《UNIX环境高级编程》 3.14. Fcntl Function

 

抱歉!评论已关闭.