摘要: gethostbyname/gethostbyaddr 均用于IPv4中, 第一个通过域名查ip地址, 第二个通过ip地址反向查询域名. 不过需要注意的反向查询需要本地有反射解析服务, 或者说本地的etc/hosts文件中有相应的记录 gethostbyname的参数是域名的字符串 gethostb 阅读全文
posted @ 2016-12-04 21:16 cfans1993 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 解决绑定失败 在测试时,经常会出现绑定错误,bind error: Address already in use 这里只要指定一下socket的reuseaddr属性即可解决 c int on=1; if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,s 阅读全文
posted @ 2016-12-04 21:15 cfans1993 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 粘包及处理方法 粘包:由于缓冲区及下层硬件的原因,第n个包与第n+1个包合并在一起发送,或第n个包与第n+1个包的一部分合并在一起发送,等等。如果接收方要求格式良好,那我们就必须控制发送与接收方式。 处理方法: 1.发送定长包,发送方每次固定发送n个字节长,同时接受方固定每次读n个字节长。缺点:数据 阅读全文
posted @ 2016-12-04 21:14 cfans1993 阅读(136) 评论(0) 推荐(0) 编辑
摘要: server.c 把accept也看成是一个read类型的函数, 于是我们可以把sockfd也放入到select中 maxi标记当前客户端连接数组的最大下标 select返回值为当前已经准备就绪的fd总数 c include include include include include inclu 阅读全文
posted @ 2016-12-04 21:13 cfans1993 阅读(1718) 评论(0) 推荐(0) 编辑
摘要: select的优点与使用方法 select用单线程的方法遍历所有待读写的I/O接口, 当有接口可用时就会返回. select可设置电脑阻塞或非阻塞. 特别注意: 每次select前都要重新初始化集合和相关的时间结构 使用的基本过程: 实例 只写了server端的,client端差不多 c inclu 阅读全文
posted @ 2016-12-04 21:13 cfans1993 阅读(283) 评论(0) 推荐(0) 编辑
摘要: select的限制 select的并发数受到两个限制:1.一个进程能打开的最大描述符数量;2.select中fd_set集合容量的限制(FD_SETSIZE) 关于进程的最大描述符数量: ulimit n:查看一个进程能打开的最大描述符数量 ulimit n 2048:将最大描述符数量更改为2048 阅读全文
posted @ 2016-12-04 21:12 cfans1993 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 非阻塞read/write 函数返回0表示可读或可写, 1表示select失败或超时 select返回0表示超时, 1表示读取失败,1表示可读或可写 非阻塞accecpt c int accept_timeout(int fd,struct sockaddr_in addr,unsigned int 阅读全文
posted @ 2016-12-04 21:12 cfans1993 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 关于select/poll与epoll select/poll虽然避免了无限循环轮循, 但是有一个问题,那就是特定事件发生时,我们还是需要再次轮循一遍查看到底时哪个或哪几个fd产生了可读或可写事件 epoll的等待事件返回后, 虽然返回值也是可用事件总数, 但可用事件会返回到一个指定的事件集合中,这 阅读全文
posted @ 2016-12-04 21:11 cfans1993 阅读(141) 评论(0) 推荐(0) 编辑
摘要: getaddrinfo getaddrinfo的一个重要功能, 很方便的构造struct sockaddr_in对象, 把繁琐的构造过程隐藏起来 getaddrinfo兼有gethostbyname和getservbyname等四个函数的功能 能传入ip/port, hostname/port, i 阅读全文
posted @ 2016-12-04 21:10 cfans1993 阅读(652) 评论(0) 推荐(0) 编辑