[英]Best way of reading all available bytes from socket in blocking mode, C++
从阻塞套接字读取所有可用字节的最佳方法是什么? “可用”表示服务器响应是一堆文本行(每行都带有“ \\ n”),而EOF是带有某些前缀的行。 该响应的长度总是不同的,因此在阅读之前我不知道。 我假设使用select()
( poll
, epoll
),然后使用'ioctl(FIONREAD)'
是最好的方法,对吗? 还是只是在读取当时所有可用的内容,然后检查是否达到了EOF,如果没有达到,则再次重复所有操作? 是的,听起来更合理。 这一切有意义吗? 那么,最有效的方法是什么?
如果您要进行阻塞读取,那么使用select
/ epoll
毫无意义。
ioctl(FIONREAD)
是一个非常无用的调用,因为到它返回更多数据时,它可能已经到达内核套接字缓冲区。
阻止读取很容易:只要继续read
用户空间套接字缓冲区,直到找到消息终止符即可。
理想情况下,您使用的网络组件不应该关心套接字是处于阻塞模式还是非阻塞模式:当套接字准备好读取时,应该调用一个函数。 在阻塞模式下,无论套接字是否准备就绪,都将调用此函数,如果没有可用数据,它将在read
时阻塞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.