我正在尝试学习套接字编程。所以我的问题是,如果你在连接到套接字之后在客户端上分叉一个孩子,即在进行连接呼叫之后。那么你可以在子节点和父节点中使用套接字描述符独立读写吗?服务器只知道一个套接字。所以,如果你正在快速阅读孩子而不是父母。父母会有数据丢失吗?
答案 0 :(得分:0)
是。如果两个进程试图对同一个连接进行操作,那么它们就会竞争。
分叉将复制连接的文件描述符(与dup
/ dup2
/ dup3
一样),但这两个文件描述符只是对同一连接的两次计数引用。
实际上,这意味着大多数fd-taking系统调用(read()
,write()
,...)将通过共享目标文件(实际连接),但close()
调用将只有递减引用计数,并且只有当引用计数变为shutdown()
时才会启动连接关闭(与0
系统调用一样)。