繁体   English   中英

在C和C ++中发送有关UDP套接字的信息

[英]send about UDP socket in C and C++

  1. 一个名为“ connect”并使用“ send”发送数据的无阻塞UDP套接字,是否有必要使用“ select / epoll / kqueue”来测试其是否可写? 在这种情况下,另一端的recv缓冲区已满,“发送”可能会失败,因此我可以使用“选择”来测试它是否可写,以便“发送”可以返回成功? 还是没有必要,因为它只是发送数据,而不在乎侧面的recv buff是否已满? 如果是这样,那么“发送”可能只会返回成功,除非另一端失败了?
  2. 对于UDP套接字,“ send”的返回值是多少,例如,我发送100个字节,它可能仅返回-1(错误)或100,没有其他值? 对于TCP可能会返回50 ~~~~

在这种情况下,另一端的recv缓冲区已满,“发送”可能会失败,因此我可以使用“选择”来测试其是否可写,以便“发送”可以返回成功?

您正在使用UDP。 数据包被发送,并且如果接收端的接收缓冲区已满,则接收系统将丢弃它。 阅读此内容: https : //en.wikipedia.org/wiki/User_Datagram_Protocol#Reliability_and_congestion_control_solutions

send()调用的结果将完全独立于接收者的状态。 即使接收方不存在,它也会返回成功。

有关UDP如何处理大于基础网络的数据包大小的数据报,请参见此内容。 发送成功但无法接收大缓冲区

通常,除非内核中的本地(发送)缓冲区已满,否则send()不会阻塞,并且始终返回写入的字节数。 对于UDP套接字,这基本上不会发生。 对于TCP套接字,如果您编写的速度超出链接或接收方的处理能力,则会发生这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM