断开连接的udp套接字是否仍会从另一个套接字连接的端口接收流量?

时间:2013-08-16 08:57:16

标签: c udp

我正在尝试编写一个服务器/客户端对来运行udp,并且我能够实现它的唯一方法是让服务器在连接开始之前知道客户端的ip和端口。我的新设计涉及等待数据包进入,记录发送方地址,分叉到子进程(父进程循环并继续侦听),然后connect's向客户端发送数据包。然后,子应该只接收来自关联客户端的数据包,但文档不清楚是父套接字将继续从该客户端接收流量。我正在研究一个尝试它的程序,但我想我可以同时提出这个问题。

编辑:似乎当孩子的套接字connected'd时,它也会连接父母的套接字。

1 个答案:

答案 0 :(得分:1)

UDP协议不运行连接,它是无连接协议。一方听,另一方只需发送数据通道就可以正常工作。

关于这个问题(对不起,之前没有说明这一点):在使用UDP时,分叉不是出路。基于连接的协议广泛用于该技术。这是可能的,因为:

  • 您可以在listen()
  • 之后立即进行分叉
  • 第一个进程接受连接与它一起工作(并且只有该进程构成新创建的连接套接字。

当您使用UDP时,您不会有这样的差距(如使用TCP之前的accept())以确定何时准确地分叉(特别是当您有密集的数据报流时)。

因此,当您设计UDP服务时,您需要

  • 使用事件循环或
  • 的非阻塞I / O.
  • 设计线程解决方案。