对 send 和 recv 的改造
2016-06-18 13:32
253 查看
// 发送数据
通过上面的改造发送数据必须使用定长包或者有 协议的包
ssize_t sendn(int fd, void *buf, size_t count, int flags) { size_t nleft = count; ssize_t nread; char *pbuf = (char*)buf; while(nleft > 0) { if ((nread = send(fd, pbuf, nleft, flags)) < 0) { if (errno == EINTR)//信号中断 { continue; } return -1; }else if (nread == 0)//连接中断 { return count - nleft;//返回发送的字节数 } nleft -= nread;//计算剩余字节数 pbuf += nread;//移动指针 } return count; }
// 接收函数 ssize_t recvn(int fd, void* buf, size_t count, int flags) { size_t nleft = count; ssize_t nwrite ; char *pbuf = (char*)buf; while(nleft > 0) { if ((nwrite = recv(fd, pbuf, nleft, flags)) < 0) { if (errno == EINTR) { continue; } return -1; }else if (nwrite == 0) { return count - nleft; } nleft -= nwrite; pbuf +=nwrite; } return count; }
通过上面的改造发送数据必须使用定长包或者有 协议的包
相关文章推荐
- 我是运营,我没有假期
- DB2数据库的安装
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- 修复mysql数据库
- 浅析SQL数据操作语句
- SQLServer 数据导入导出的几种方法小结
- 简述MySQL分片中快速数据迁移
- MySQL数据备份之mysqldump的使用详解
- C#实现窗体间传递数据实例
- C#中的委托数据类型简介
- SQL Server删除表及删除表中数据的方法
- SqlServer2008误操作数据(delete或者update)后恢复数据的方法
- 给你的数据库文件减肥
- Oracle数据更改后出错的解决方法
- Oracle数据库数据丢失恢复的几种方法总结
- C#将Sql数据保存到Excel文件中的方法
- C#实例代码之抽奖升级版可以经表格数据导入数据库,抽奖设置,补抽
- SQL Server简单实现数据的日报和月报功能
- MFC实现在文件尾追加数据的方法