【发布时间】:2011-07-18 03:26:17
【问题描述】:
我正在通过 TCP/IP 套接字读取数据流。流负载非常不均匀。有时每秒有大量数据到达,有时一个小时没有数据。在长时间不活动的情况下(远程服务器没有数据,但连接仍然在线)我的程序应该采取一些措施。
我正在使用 select() 实现超时。它告诉我是否有数据准备好,但我不知道在不导致 read() 阻塞的情况下我能读多少。阻塞是不可接受的,因为它的持续时间可能比我需要的超时时间长得多。
为了提高效率,流被读入大缓冲区,read() 调用提供了该缓冲区大小。
如果要填充的缓冲区大于套接字中当前可用的数据量,read() 是否会在 select() 之后阻塞?
【问题讨论】:
-
我正在发生这种情况。 Select() 在从串行端口读取时返回然后 read() 块。我知道这是 2011 年的,但偶然发现了它。