recv和send的完整写法
来源:互联网 发布:java集合框架及其特点 编辑:程序博客网 时间:2024/05/11 19:37
struct evbuffer* input = evbuffer_new();//数据缓冲void read_data(){ char buffer[1024] = { '\0' }; int ret = recv(fd, buffer, 1024, 0); //从接收缓冲取数据成功 if (ret > 0) { evbuffer_add(input, buffer, ret); //不足1024,说明取完了 if (ret《 1024) { return; } //有足够的数据,还没有取完需要继续取 return read_data(); } //发生错误 if (ret == -1) { //EAGAIN提示你的应用程序现在没有数据可读请稍后再试 //EINTR指操作被中断唤醒,需要重新读 if ((errno == EAGAIN) || (errno == EINTR)) { return read_data(); } //异常断开情况 else { close(fd); event_free(ev); } return; } //接收到主动关闭请求 if (ret == 0) { close(fd); event_free(ev); }}
string response;//发送的数据void send_response(){ unsigned int pos = 0; do { int ret = send(fd, response.data.c_str()+pos, response.data.length()-pos, 0); //发生错误 if (-1 == ret) { if ((errno == EAGAIN) || (errno == EINTR)) { ret = 0; continue; } //EWOULDBLOCK用于非阻塞模式,不需要重新读或者写 else if (errno == EWOULDBLOCK) { break; } //异常断开 else { close(fd); event_free(ev); break; } } //接收到主动关闭请求 if (0 == ret) { close(fd); event_free(ev); break; } pos += ret; } while (pos《 response.data.length()); }
Markdown在代码块中使用”<”老是造成后面截断,所以这里使用了”《”来代替
1 0
- recv和send的完整写法
- send和recv的flags
- epoll的ET和LT模式下,accept,recv,send写法
- 关于recv()和send()的返回值
- 改写你的recv和send函数
- socket的send和recv函数详解
- send()函数的理解和recv()函数
- recv和send的真正作用
- 有关send()和recv()函数的理解
- send()函数的理解和recv()函数
- 对recv和send的认识
- send()函数的理解和recv()函数
- TCP与UDP的Send和Recv
- send()函数的理解和recv()函数
- 对 send 和 recv 的改造
- send和recv的执行过程
- send()、sendto()和recv()、recvfrom()的使用
- c++socket通信的recv和send
- 第十一周--项目1 - 二叉树算法验证(1)层次遍历算法的验证
- Two ways get 1,2,3,4,5 using setTimeout
- MAP 转换成可操作的MAP MAP对象方法的实现
- Java陷阱之assert关键字
- 43个功能测试点总结
- recv和send的完整写法
- canvas制作倒计时
- Spark常用transformation和action操作
- logback.xml 常用配置详解
- 小菜鸟初次接触JBoss应用服务器
- Mysql集群的HA原理及配置指南之添加slave(三)
- POS机为什么要签到?
- Jupyter Notebook 快速入门(上)
- 反射