防止粘包的read write函数
2015-10-09 11:32
337 查看
ssize_t readn(int fd, void * buf, size_t count) { size_t nleft = count; ssize_t nread; char *bufp = (char *)buf; while (nleft > 0) { if ((nread = read(fd, bufp, nleft)) < 0) { if (errno == EINTR) continue; return -1; } else if (nread == 0) //对方关闭或者已经读到eof return count - nleft; bufp += nread; nleft -= nread; } return count; } ssize_t writen(int fd, const void * buf, size_t count) { size_t nleft = count; ssize_t nwritten; char *bufp = (char *)buf; while (nleft > 0) { if ((nwritten = write(fd, bufp, nleft)) < 0) { if (errno == EINTR) continue; return -1; } else if (nwritten == 0) continue; bufp += nwritten; nleft -= nwritten; } return count; } |
相关文章推荐
- Java学习之Iterator(迭代器)的一般用法
- zookeeper学习笔记
- How to Write Go Code
- serialize()
- Base64加密解密
- MFC 多语言 本地化
- HDU 5476 Explore Track of Point
- 使用flume问题总结2——flume event的简单理解
- 二维码生成原理
- jsp中用EL读取了数据库里面的时间,怎么设置格式显示的格式
- joomla学习笔记-备份与还原
- php中mysqli 处理查询结果集的几个方法
- [Android Pro] Android Fragment getActivity返回null解决
- 做人做事、原则
- linux之sed用法整理
- linux之sed用法整理
- linux之sed用法整理
- linux之sed用法整理
- linux之sed用法整理
- linux之sed用法整理