从未绑定的UDP套接字发送到

时间:2015-05-10 10:16:40

标签: linux sockets networking tcp udp

情况:我需要从一些空闲端口使用UDP从客户端广播,然后接受来自端口上服务器的客户端上的tcp连接,但数量相同,但是TCP。这就是为什么我需要在广播之前监听(并绑定)到这个端口。端口不能是const,因为我可以在一台机器上运行多个客户端。 所以这里有一些问题可以帮助我让这种情况更加清晰:

1)如果我从unbinded UDP套接字发送sendto,是否绑定到任何空闲端口,所有下一个sendto消息将从此端口发送,或者每次选择端口用于新消息?

2)我可以要求系统为我保留一些免费端口吗? (我需要为UDP和TCP连接保留两个具有相同编号的端口)

3)我确信有一种已知的方法来处理这些情况,它是什么?

2 个答案:

答案 0 :(得分:1)

  

1)如果我从unbinded UDP套接字发送sendto,它是否绑定到任何空闲端口,所有下一个sendto消息将从此端口发送

  

或每次为新邮件选择端口?

没有

  

2)我可以要求系统为我保留一些免费端口吗? (我需要为UDP和TCP连接保留两个具有相同编号的端口)

发生自动绑定时会发生这种情况。您可以通过绑定到端口号零来显式执行,但这不是必需的。它也不保证您可以将UDP和TCP绑定到相同的端口号。

  

3)我确信有一种已知的方法来处理这些情况,它是什么?

你找到了。让自动绑定发生。

答案 1 :(得分:0)

我在stackoverflow上找到了一些答案

  1. 您可以绑定到0端口,指定它为struct semaddr_in。这将允许您为您的连接类型获取未使用的端口。它没有被定义为免费用于其他类型的连接。
  2. Bind to any port available

    查看@ remy的回答
    1. 是的,它们可以因为为UDP或TCP协议指定了标头。所以机器可以互相辨别。
    2. 请参阅Can TCP and UDP sockets use the same port?

      1. 如果您绑定到0端口,则在致电listen
      2. 之前,您将能够sendto使用该端口