鉴于 len 参数设置为 10240,我必须重复调用该函数以获取所有数据。但这最终导致阻塞。如何以独立于平台的方式获取所有数据并安全返回?
顺便说一句,我在发件人端使用 netcat:
猫ocr_pi.png | nc -u 服务器 5555
这个问题与 nc 的行为有关吗?我没有找到任何参数来设置 UDP 数据包大小(-O 用于 TCP)。谢谢。
UDP 作为消息发送和接收数据。在len
参数中,您告诉recvfrom()
您可以接收的最大消息大小,然后recvfrom()
等待直到完整消息到达,而不管其大小。UDP 消息是自包含的。与 TCP 不同,UDP 消息不能部分发送/接收。这是一个全有或全无的事情。如果接收到的消息的大小大于len
您指定的值,则该消息将被丢弃并且您会收到错误消息。
阻止的唯一方法recvfrom()
是没有可读取的消息。如果您不想阻止,请使用select()
(或pselect()
或epoll
其他平台等效项)指定等待消息到达的超时时间,然后recvfrom()
仅在确实有要阅读的内容时才调用。