linux – 使用MSG_NONBLOCK和MSG_WAITALL进行recv
发布时间:2020-12-14 02:21:00 所属栏目:Linux 来源:网络整理
导读:我想使用带有非阻塞标志MSG_NONBLOCK的recv系统调用.但是使用此标志,syscall可以在满足完整请求之前返回.所以, 我可以添加MSG_WAITALL标志吗?它会无阻塞吗? 或者我应该如何使用nonblocking recv将阻塞recv重写为循环 解决方法 这就是我为同样的问题所做的,
我想使用带有非阻塞标志MSG_NONBLOCK的recv系统调用.但是使用此标志,syscall可以在满足完整请求之前返回.所以,
>我可以添加MSG_WAITALL标志吗?它会无阻塞吗? 解决方法
这就是我为同样的问题所做的,但我想要一些确认,这可以按预期工作……
ssize_t recv_allOrNothing(int socket_id,void *buffer,size_t buffer_len,bool block = false) { if(!block) { ssize_t bytes_received = recv(socket_id,buffer,buffer_len,MSG_DONTWAIT | MSG_PEEK); if (bytes_received == -1) return -1; if ((size_t)bytes_received != buffer_len) return 0; } return recv(socket_id,MSG_WAITALL); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- linux – 使用top命令捕获由COMMAND过滤的进程的%CPU和PID
- linux – 如何使用Varnish健康探针记录时间戳?
- LINUX实操:Linux探索之旅 | 第四部分测试题
- 我如何知道要为我的Linux AMI安装哪个Linux软件包
- Linux文件系统上的特殊权限(SUID、SGID、Sticky)
- linux – HTTP下载在一段时间后停止,无法恢复
- linux-kernel – 为什么cpu“insn per cycle”在类似的cpu中
- linux – 监控模式接口上的tcpdump – 没有捕获
- linux中的gdb C代码 – 地址超出范围
- Linux平台中Java代码的调用约定是什么?