我正在打开一个到服务器的套接字,然后休眠,可能会持续很长时间(几天)。该进程是单线程的,所以我没有专用于管理套接字的线程。套接字应该保持事件状态。我假设服务器不发送任何需要客户端响应的消息。
问题是,假设套接字将保持事件状态是否安全? Linux 内核是否处理所需的 TCP 通信(例如保持事件数据包?)或从应用程序不时调用所需的套接字中读取数据?
如果服务器向客户端发送一些消息怎么办?我假设这些数据有一些缓冲区。有多大,怎么改,满了怎么办?
最佳答案
除了这里已经说过的,防火墙和 NAT 可能会在一段时间不活动后丢弃 TCP 连接。 TCP 保持事件消息可能不够频繁以保持 TCP 连接事件。这就是为什么许多应用程序级协议(protocol)具有应用程序级保活消息的原因(例如,我通常将我的 ssh 客户端配置为每 30 分钟发送一次保活消息,因为我的办公室 NAT 在 1 小时后断开 TCP 连接)。
换句话说,您的应用程序可能希望在可配置的时间内与其远程对等方交换一些消息。
或者,使用特定于平台的套接字选项启用 TCP 保持事件消息(SO_KEEPALIVE
)并配置超时(TCP_KEEPIDLE
在 Linux 上)。
关于linux - 一个打开的套接字可以长时间不读取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25370935/