Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85017
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-12 14:05
个人简介

欢迎大家光临我的博客。

文章分类

全部博文(38)

文章存档

2013年(38)

我的朋友

分类: 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个数

阅读(893) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~