首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对套接字对的读/写是完全同步还是有缓冲?

对套接字对的读/写是完全同步还是有缓冲?
EN

Stack Overflow用户
提问于 2014-02-09 02:03:51
回答 1查看 1.9K关注 0票数 0

当使用socketpair进行通信时,操作系统是否提供任何类型的缓冲区?也就是说,如果我这样做了

代码语言:javascript
复制
int sv[2];
socketpair(PF_LOCAL, SOCK_STREAM, 0, sv);

在发生read(sv[1], ...)之前,write(sv[0], ...)是否会阻塞?或者,即使在发生write时没有发生read,也会将一些数据存储在操作系统中的某个位置吗?

EN

回答 1

Stack Overflow用户

发布于 2014-02-09 03:02:16

在C中,socketpair套接字没有缓冲,就像fopen中有STDIO缓冲一样。但是,您的操作系统中有一个缓冲区。缓冲区大小可以通过使用SO_SNDBUFSO_RCVBUFsetsockopt来设置,就像任何普通套接字一样。默认值取决于操作系统。man -s7 socket将在这方面提供帮助。

缓冲可能稍微依赖于套接字类型。例如,我认为使用数据报套接字可以保证原子性。在大多数(所有?)POSIX操作系统唯一可用的地址族是AF_UNIX。我相信您可以使用SOCK_STREAMSOCK_DGRAM,缓冲技术将取决于您选择哪种技术。在内存中,如果您使用的缓冲区大小超过了可用的缓冲区大小(因为数据报是以原子方式传输的),那么SOCK_DGRAM将简单地失败,而SOCK_STREAM将阻塞;在依赖它之前,我会对此进行检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21649753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档