【发布时间】:2014-02-08 18:03:50
【问题描述】:
在使用socketpair 进行通信时,操作系统是否提供任何类型的缓冲区?即,如果我这样做了
int sv[2];
socketpair(PF_LOCAL, SOCK_STREAM, 0, sv);
在read(sv[1], ...) 也发生之前,write(sv[0], ...) 会阻塞吗?或者即使write 发生时没有发生read,也会在操作系统的某个位置存储一些数据?
【问题讨论】:
-
有一个缓冲区。如果没有缓冲区,管道、fifos、socketpair 等将几乎毫无用处。 `我的猜测是缓冲区大小是 PIPE_BUF 字节,但我从未在任何地方看到明确记录。在任何情况下,如果您填充缓冲区,您将阻塞(如果非阻塞,则 EAGAIN 出错)。
-
对于套接字,您可以通过
setsockopt设置缓冲区大小。
标签: c linux unix networking posix