首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >写到SOCK_SEQPACKET是原子的吗?

写到SOCK_SEQPACKET是原子的吗?
EN

Stack Overflow用户
提问于 2017-09-22 10:44:46
回答 1查看 301关注 0票数 3

我的意思是原子是成功或失败,什么也不做。

我知道socketpair(AF_LOCAL, SOCK_STREAM)不是原子的,如果多个进程/线程调用write(fd, buf, len),那么write()的返回值可能是> 0 && < len并导致数据无序。

如果多个进程/线程write(buf, len)到由socketpair(AF_LOCAL, SOCK_SEQPACKET)创建的sock_fd,那么它是原子的吗?

我查看了Linux手册,发现了一些关于pipe()的东西,其中说如果len小于PIPE_BUF,那么write/writev是原子的。

我没有发现关于socketpair的任何东西。我编写了一个测试代码,发现SOCK_SEQPACKET似乎是原子的,我向fd写入随机长度缓冲区,返回值总是-1len

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 12:22:36

是。

任何基于数据报的接口(即,传递给write的大小对执行read的人来说都是可见的)必须是原子的。没有其他办法来保证财产。

因此,SOCK_SEQPACKETSOCK_DGRAM都必须是原子的,才能起作用。

出于同样的原因,SOCK_STREAM没有如此零散的保证。

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

https://stackoverflow.com/questions/46362854

复制
相关文章

相似问题

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