第一个tcp echo客户端无法与第二个tcp echo客户端通信(坏文件描述符)

时间:2013-04-05 21:31:45

标签: c sockets tcp network-programming

我的应用程序是Multiuser Echo聊天程序。如果客户端发送消息,则服务器发送给所有客户端,包括发送消息的客户端。它在c。

中实现

服务器为每个新客户端连接分叉进程。 所有子进程都可以访问存储在共享内存中的所有客户端的套接字描述符

当有一个客户端时,消息被正确回显。当第二个客户加入时 并发送消息,它正确地回应两个客户端。

当第一个客户端发送消息时,它会被正确地传输回第一个客户端。但是当尝试将该消息发送到第二个客户端时,它失败并显示错误错误的文件描述符

类似地,每个客户端都可以向之前和之后连接的客户端发送消息,但不能向稍后连接的客户端发送消息

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

访问套接字描述符并不意味着您可以访问套接字。你需要自己共享套接字,而不是它们的描述符。

此外,尝试同时发送相同TCP连接的两个进程的结果未定义。例如,数据可能是交错的。

所以你的设计基本上已经破了。

您实际上可以共享套接字。你如何做到这一点取决于平台。您还需要使用某种形式的IPC来仲裁哪个进程可以写入套接字。例如,您可以为每个套接字使用信号量。