C++ 在C和C+中发送关于UDP套接字的信息+; 一个名为“connect”的非阻塞UDP套接字,使用“send”发送数据,是否需要使用“select/epoll/kqueue”测试它是否可写?在这种情况下,另一端的recv缓冲区已满,“发送”可能会失败,因此我可以使用“选择”测试它是否可写,以便“发送”可能返回成功? 或者这是不必要的,因为它只是发送数据,而不关心侧边的recv buff是否已满?如果这是真的,“发送”只能返回成功,除非另一方失败 对于UDP套接字,“发送”的返回值是多少,例如,我发送100字节,它可能只返回-1(错误)或100,没有其他值?对于TCP,可能返回50~~~~

C++ 在C和C+中发送关于UDP套接字的信息+; 一个名为“connect”的非阻塞UDP套接字,使用“send”发送数据,是否需要使用“select/epoll/kqueue”测试它是否可写?在这种情况下,另一端的recv缓冲区已满,“发送”可能会失败,因此我可以使用“选择”测试它是否可写,以便“发送”可能返回成功? 或者这是不必要的,因为它只是发送数据,而不关心侧边的recv buff是否已满?如果这是真的,“发送”只能返回成功,除非另一方失败 对于UDP套接字,“发送”的返回值是多少,例如,我发送100字节,它可能只返回-1(错误)或100,没有其他值?对于TCP,可能返回50~~~~,c++,c,sockets,unix,C++,C,Sockets,Unix,在这种情况下,另一端的recv缓冲区已满,“发送”可能会失败,因此 可以使用“选择”来测试它是否可写,以便“发送”可以返回 成功 您正在使用UDP。数据包被发送,如果接收端的接收缓冲区已满,接收系统将丢弃它。请阅读以下内容: send()调用的结果将完全独立于接收器的状态。即使接收端不存在,它也会返回成功 有关UDP处理大于底层网络数据包大小的数据报的方式,请参见以下内容:通常,send()不会阻塞,并始终返回写入的字节数,除非内核中的本地(发送)缓冲区已满。对于UDP套接字,这基本上永远不会发

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

您正在使用UDP。数据包被发送,如果接收端的接收缓冲区已满,接收系统将丢弃它。请阅读以下内容:

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


有关UDP处理大于底层网络数据包大小的数据报的方式,请参见以下内容:

通常,
send()
不会阻塞,并始终返回写入的字节数,除非内核中的本地(发送)缓冲区已满。对于UDP套接字,这基本上永远不会发生。对于TCP套接字,如果写入速度快于链路或接收端可以处理的速度,则会发生这种情况。

UDP是无连接的-发送方不知道数据包是否到达接收方,更不用说他们是否接受数据包或缓冲区是否已满。