flags = fcntl(fd,F_GETFL,0);
fcntl(fd,F_SETFL,flags);
flags = fcntl(fd,F_GETFL,0); flags |= O_NONBLOCK; fcntl(fd,F_SETFL,flags);
或者一步到位的方式:
fcntl(socket,F_SETFL,fcntl(socket,F_GETFL)|O_NONBLOCK);
flags = fcntl(fd,F_GETFL,0); flags &= ~O_NONBLOCK; fcntl(fd,F_SETFL,flags);
</pre><pre name="code" class="cpp">#include<sys/types.h> #include<sys/socket.h> int socket(int domain,int type,int protocal);
Type 参数指定服务类型,服务类型主要有SOCK_STREAM服务,SOCK_DGREAM服务,值得指出的是,在Linux内核版本2.6.17起,type参数可以接受上述服务的同时也可以接受下面的两个标志与之相与:SOCK_NONBLOCK,SOCK_CLOEXEC,它们分别表示将新创建sock 设为非阻塞的,以及在fork调用创建子进程时在子进程中关闭socket.但是之前的版本并不支持。
int fd_sock = socket(AF_INET,SOCK_STREAM,0);
int fd_sock = socket(AF_INET,SOCK_STREAM|SOCK_NONBLOCK,0);
上述代码表示创建的一个新的socket为非阻塞式
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/helplee601276804/article/details/46786617