1. ioctl()
/* set socket to non-blocking i/o */ sts = ioctl(ccp->main_sock, FIONBIO, (char *)&one); if (sts) { setproderr(PE_TCPERROR, GEL_FATAL); sprintf(line,"ioctl (main) failed - %s",strerror(errno)); tcpabort(); }
2.fcntl()
/* Set socket to non-blocking */ if ((flags = fcntl(sock_descriptor, F_GETFL, 0)) < 0) { /* Handle error */ } if (fcntl(socket_descriptor, F_SETFL, flags | O_NONBLOCK) < 0) { /* Handle error */ } /* Set socket to blocking */ if ((flags = fcntl(sock_descriptor, F_GETFL, 0)) < 0) { /* Handle error */ } if (fcntl(socket_descriptor, F_SETFL, flags & (~O_NONBLOCK)) < 0) { /* Handle error */ }
本文介绍如何使用ioctl()和fcntl()函数来设置套接字的非阻塞和阻塞模式。通过ioctl()函数设置FIONBIO选项实现非阻塞I/O,通过fcntl()函数设置O_NONBLOCK标志来实现相同目的。
1805

被折叠的 条评论
为什么被折叠?



