【问题标题】:Bind address already used C udp/tcp绑定地址已经使用 C udp/tcp
【发布时间】:2015-12-05 19:18:50
【问题描述】:

我正在尝试构建一个服务器,首先我必须在这个服务器中接收一个 UDP,然后继续等待更多的 UDP 消息,当我收到这第一条 UDP 消息时,我需要创建一个 TCP 连接并等待客户端。

如果我等待 UDP 消息并从 TCP 开始,我的服务器工作正常,但我想使用 fork,并且父亲等待更多 UDP 消息,而孩子从 TCP 部分开始,但是如果我这样做,我的绑定有问题,因为它已经被 UDP 部分使用......所以.. 有解决方案吗?
是否可以做我想做的事?

希望你能理解。

非常感谢。

【问题讨论】:

  • 您对哪个bind 有疑问?子进程应该继承 UDP 和 TCP 监听套接字,因此它不需要 bind 任何东西。
  • TCP 绑定到端口没有任何问题,因为它已被 UDP 套接字使用。请说明您的实际问题,并最好显示一些代码。

标签: c sockets tcp udp bind


【解决方案1】:

在同一个端口上打开 UDP 和 TCP 套接字很好。例如,DNS 在 UDP 53 和 TCP 53 端口上工作。你应该在 fork 之前打开套接字,然后在 child 中关闭它不需要使用的。

【讨论】:

    【解决方案2】:

    UDP 和 TCP 端口位于不同的空间。因此,您可以将一个套接字绑定到 UDP/8888 并将另一个套接字绑定到 TCP/8888 没有问题。如果您的子进程尝试绑定到同一个 TCP 端口,那么您可能会遇到问题。

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多