c - 用于 IPC 的 Linux 环回 UDP 套接字

标签 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 不接收它发送的数据?这是否值得出于任何原因(性能/可维护性/乐趣/等)进行探索?

最佳答案

一次只有一个进程可以绑定(bind)到给定的套接字地址。随后的绑定(bind)尝试将获得 EADDRINUSE,这意味着该地址已在使用中。

对于ip地址,套接字地址由端口和IP地址组成。请参见“man 7 ip” ' 了解详情。

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

如果您的两个程序总是在同一台机器上,您可能希望改用 unix 域套接字,因为它们对于该用例而言效率更高。

关于c - 用于 IPC 的 Linux 环回 UDP 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178330/

相关文章:

vb.net - 已经运行的应用程序现在出现套接字错误 10013

java - 使用 Java 监听 Thread 中的传入流

c - 如何在postgres c用户定义函数中使用float8

c++ - 在源文件中指定包含前缀与在编译器的搜索路径参数中指定包含前缀有何优缺点?

C 程序可以编译,但执行后立即终止

regex - 替换文本文件中的换行符和变量

python - 使用发送方法pyzmq错误不支持检索操作

c - SDL 窗口未正确打开

c - 三元运算符始终为假

Linux - 使用 SSH 的关闭脚本