UNIX 域套接字是否会溢出?

bot*_*t47 6 unix-sockets

当您使用 socat 创建 UNIX 套接字并向其发送数据,但没有另一个 socat 实例连接到该套接字时,会发生什么?

如果将大量数据写入 UNIX 套接字但从未读取会发生什么情况?是否有溢出的缓冲区?它是环形缓冲的吗?

Gil*_*il' 11

Unix 套接字是可靠的。如果读者不阅读,作者就会阻塞。如果套接字是数据报套接字,则每次写入与读取配对。如果套接字是流套接字,内核可能会在写入器和读取器之间缓冲一些字节,但是当缓冲区已满时,写入器将阻塞。数据永远不会被丢弃,除非读取器在读取缓冲区之前关闭连接,则缓冲数据除外。

  • @MaxRied Unix 套接字是可靠的,而不是那么有损。这意味着他们不会丢失消息。 (5认同)
  • 是的,所有类型的 Unix 域套接字(数据报、流和序列包)都是可靠的、有序的传递机制。也就是说,除非接收方在没有首先接收数据的情况下终止或关闭连接,否则它们不会丢弃数据。通常,它们默认以阻塞模式运行,但可以置于非阻塞模式。 (2认同)