初级问题,socket(AF_INET, SOCK_STREAM, 0)是阻塞式还是非阻塞式?
我想在UNIX下编一个socket Server,希望recv的时候,如果没有数据就直接返回,
TCP的Socket socket(AF_INET, SOCK_STREAM, 0)好像是阻塞的方式吧?
怎么设置为非阻塞的方式?
能给个例子吗?
问题点数:100、回复次数:6Top
1 楼fierygnu(va_list)回复于 2006-03-21 16:24:05 得分 0
用fcntl设置O_NONBLOCK。Top
2 楼wybin(星雨)回复于 2006-03-21 17:04:36 得分 0
能具体说明一下fcntl怎么设置吗?Top
3 楼fierygnu(va_list)回复于 2006-03-21 17:20:20 得分 25
fcntl (socket_fd, F_SETFL, O_NONBLOCK)Top
4 楼bjpy2005(冰城的神话)回复于 2006-03-22 00:30:35 得分 25
int flags;
/*Set a socket as nonblocking*/
if( (flags = fcontl (fd ,F_GETFL,0)) < 0)
err_sys("F_GETFL error") ;
flags |= O_NONBLOCK;
if( (fcntl (fd, F_SETFL, flags) < 0)
err_sys("F_SETFL error") ;
Top
5 楼Mybox(卡卡西)回复于 2006-03-22 10:18:39 得分 25
int val;
val = fcntl(sock_fd, F_GETFL, 0);
fcntl(sock_fd, F_SETFL, val | O_NONBLOCK);Top
6 楼tonyMCM(南京~上海)回复于 2006-03-22 15:35:10 得分 25
int flags;
flags=fcntl(listenfd,F_GETFL,0);//通过 F_GETFL 获取文件描述标志给flags
fcntl(listenfd,F_SETFL,flags|O_NONBLOCK);//此处只是把描述符寄存位制为O_NONBLOCK
Top




