分类: C/C++
2013-11-22 17:27:35
这一段在看《unix网络编程》,fgsj1122回顾之前做项目用到的一些东西,在这里总结一下:
(1)TCP套接口编程
这里介绍各个接口函数:
1 文件描述符
-socket(int domain, int type, int protocol); //生成文件描述符
-bind(int sockfd, struct sockaddr *my_addr, int addrlen); //将本地的一个端口绑定到fd上,一般只需要在server端
2 服务端
-listen(int sockfd, int backlog); //有两个作用:1,将主动套接口变为被动套接口;2,设置最大连接数backlog
-accept(int sockfd, void *addr, int *addrlen); //为建立好的连接生成一个新的fd
3 客户端
-connect(int sockfd, struct sockaddr *serv_addr, int addrlen); //进行socket连接
4 通信
-send(int sockfd, const void *msg, int len, unsigned int flags); //发送请求
-recv(int sockfd, void *buf, int len, unsigned int flags); //接收请求
(2)I/O多路复用
I/O多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。按照《UNIX网络编程》的说法,I/O多路复用用于以下三种情况:
a)一个TCP服务器既要处理监听套接口,又要处理已连接套接口;
b)一个服务器既要处理TCP,又要处理UDP;
c)当客户端处理多个描述字(比如处理交互式输入和网络套接口)
目前被广泛使用的是select和epoll:
2.1,select
int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const struct timeval *timeout)
第一个参数指定最大的fd数目,中间三个分别是被监控的读、写、异常的fd集,最后一个是超时时间。select函数会阻塞等待,直到监控的fd集中有fd就绪,或者已经超时。
2.2,epoll
epoll相比于select,主要的好处在于它不像select一样去轮询fd集,而是由内核去触发;另外它支持更大的fd个数