用于IPC的Linux环回UDP套接字

时间:2014-01-17 05:10:39

标签: c linux sockets udp ipc

目前,我有工作,功能正常的代码在我编写的两个程序之间传递消息。这是我正在使用的方案:

计划A

  • a_tx_socket - >发送数据127.0.0.1,端口A

  • a_rx_socket - >接收数据127.0.0.1,端口B

计划B

  • b_tx_socket - >在127.0.0.1,端口B上发送数据

  • b_rx_socket - >接收数据127.0.0.1,端口A

请注意,我在接收数据的套接字(a_rx_socket和b_rx_socket)上调用bind()。每个套接字都是通过调用socket()系统调用创建的。

现在,对于我的问题......有没有办法摆脱一个端口?即只能使用一个端口在环回地址上发送/接收?我如何确保程序A / B不接收它发送的数据?这是值得探索的任何原因(性能/可维护性/乐趣/等)?

1 个答案:

答案 0 :(得分:2)

一次只能有一个进程绑定到给定的套接字地址。后续尝试绑定将获得EADDRINUSE,这意味着该地址已被使用。

对于ip地址,套接字地址由端口和IP地址组成。有关详细信息,请参阅“man 7 ip”。

因此,您需要两个端口,因为否则只有两个程序中的一个能够绑定(因此接收数据包)。

如果你的程序对总是在同一台机器上,你可能想要使用unix域套接字,因为它们对那个用例更有效。