我有一个父进程和n个子进程,等待以便从网络接收内容。事情是,对于孩子从网络收到的每条消息,我需要告诉父亲该消息包含什么。如果我尝试在父亲和孩子之间做一个管道或套接字对话然后父亲不知道消息在哪里结束,另一个在哪里开始。你能帮忙吗?
答案 0 :(得分:2)
您正在使用面向流的管道/套接字对。所以你失去了信息边界。
使用面向数据报的套接字来保持消息边界。
有关基于数据报的unix套接字和套接字对的更多信息,请参阅mapage unix(7)。
有些功能可能适合您:
socket(AF_UNIX, SOCK_DGRAM, 0);
socketpair(AF_UNIX, SOCK_DGRAM, 0, int *sv);
答案 1 :(得分:1)
在写入管道或socketpair之前,请使用一些分隔符,以便每个孩子在发送给父亲之前将该分隔符添加到消息中