linux 网络编程总结
linux网络编程中两个重要的高级编程函数:fcntl和select
函数原型如下:
1、int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);
2、
int fcntl(int fd , int cmd);
int fcntl(int fd,int cmd,long arg);
int fcntl(int fd,int cmd,struct flock * lock);
 
    函数1:select
    是为了支持网络中多IO机制,也就是所说的并发处理,n是进程创建的最大文件描述符+1,参数readfds、writefds 和exceptfds 称为描述词组,表示文件描述符的各种状态;timeout超时时间值,如果在轮询中超过时间,将检测另一个描述符,一般情况下,select还与下面一些函数共同使用,来检测各个文件描述符的状态改变:
 FD_ZERO(fd_set *fdset):清空fdset与所有文件描述符的联系。
 FD_SET(int fd, fd_set *fdset):建立文件描述符fd与fdset的联系。
 FD_CLR(int fd, fd_set *fdset):清除文件描述符fd与fdset的联系。
 FD_ISSET(int fd, fd_set *fdset):检查fd_set联系的文件描述符fd是否可读写,>0表示可读写。
    返回值:如果为0,则表示说明在设定的时间内,socket的状态没有发生变化。
            如果-1,这说明select函数出错;
            如果其他情况,表明执行成功,检测到文件描述符状态变化。

    函数2:fcntl
    功能:用来操作文件描述词的一些特性。
    参数说明:参数fd代表欲设置的文件描述词,参数cmd代表欲操作的指令。
    返回值:成功,返回0,失败,返回-1
    例子:下面表示设置套接字描述符sockfd的状态为非阻塞
	fcntl( sockfd, F_SETFL, O_NONBLOCK); 
	// sockfd 是要改变状态的文件描述符. 
	// F_SETFL 表明要改变文件描述符的状态 
	// O_NONBLOCK 表示将文件描述符变为非阻塞的. 
 
Logo

更多推荐