我想使用带有非阻塞标志MSG_NONBLOCK的recv系统调用.但是使用此标志,syscall可以在满足完整请求之前返回.所以,
>我可以添加MSG_WAITALL标志吗?它会无阻塞吗?
>或者我应该如何使用nonblocking recv将阻塞recv重写为循环
解决方法
这就是我为同样的问题所做的,但我想要一些确认,这可以按预期工作……
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); }