Łuk*_*Lew 13 sockets pipe linux-kernel
我不仅想知道用户方面的差异,还想知道Linux内核实现中的差异/常见部分.
caf*_*caf 21
管道是单向的,因此您需要两个管道进行双向通信,而套接字对是双向的.
管道总是面向流,而socketpairs可以是面向数据报的.
socketpairs是正常的AF_UNIX插座,这意味着辅助消息喜欢SCM_RIGHTS和SCM_CREDENTIALS可在它们被传递.
在内核中,管道在网络代码中的文件系统代码和套接字对中实现.
Dom*_*omQ 11
在shutdown()和SCM_RIGHTS需要socketpairs的能力,以实现在多线程程序的子进程种族防爆通讯.
管道可以通过意外的情况下,多个线程被复制pipe()并fork()在同一时间; 在这种情况下,管道的写入端可能永远不会被关闭,EOF可能永远不会在读取端发生,从而导致死锁.即使对于那些fork()仅用于子进程的程序(即所有fork()s在子进程中都被及时跟随execve()),并行fork()设置FD_CLOEXEC比特的管道捕获,禁止使用接受的非可移植Linux pipe2()系统调用O_CLOEXEC.
以便携式方式解决此危险,对于fork()没有调用的程序,也execve()涉及socketpairs:
shutdown()之前close()从父引起种族防EOF条件,而不管文件描述符是否被复制.SCM_RIGHTS消息的套接字将只读结束发送给父进程.| 归档时间: |
|
| 查看次数: |
6955 次 |
| 最近记录: |