发送有关 C 和 C++ 中的 UDP 套接字的信息
send about UDP socket in C and C++
- 一个叫"connect"的非块UDP套接字,用"发送"发送数据,是不是有必要用"select/epoll/kqueue"来测试它是否可写?在这种情况下,另一侧 recv 缓冲区已满,"发送"可能会失败,所以我可以使用"选择"来测试它是可写的,以便"发送"可能会返回成功?或者这是不必要的,因为它只是将数据发送出去,并不关心一方的recv增益是否满?如果真是这样,"送"可能只会返回成功,除非对方倒下?
- 对于UDP套接字,"send"的返回值是什么,例如,我发送100个字节,它可能只返回-1(错误(或100,没有其他值?对于TCP可能返回50~~~~
在这种情况下,另一侧 recv 缓冲区已满,"发送"可能会失败,所以 可以使用"选择"来测试它是可写的,以便"发送"可以返回 成功?
您正在使用 UDP。 数据包被发送,如果接收端的接收缓冲区已满,接收系统将丢弃它。 阅读此内容: https://en.wikipedia.org/wiki/User_Datagram_Protocol#Reliability_and_congestion_control_solutions
send()
调用的结果将完全独立于接收方的状态。 即使接收端不存在,它也会返回成功。
有关 UDP 如何处理大于底层网络数据包大小的数据报,请参阅以下内容: Linux 上的 UDP 套接字;发送成功但无法接收大型缓冲区
通常,send()
不会阻塞,并且始终返回写入的字节数,除非内核中的本地(发送(缓冲区已满。对于基本上永远不会发生的UDP套接字。对于TCP套接字,如果您写入速度快于链路或接收端可以处理的速度,就会发生这种情况。
相关文章:
- 使用 IP 帮助程序的 Windows 中活动 UDP 连接的远程地址
- 如何击败UDP客户端中的延迟
- C++游戏中的 UDP 通信问题
- 通过 c++ 中的 udp 套接字将派生类对象从一个进程发送到另一个进程
- 发送有关 C 和 C++ 中的 UDP 套接字的信息
- OPENCV中的GSTREAMER不会通过UDP发送视频数据
- 使用Ubuntu的C/C++中的UDP套接字发送到限制
- 无法在 matlab 中的 UDP 客户端和 Linux 中的服务器之间发送数据
- 我可以在TCP和UDP中使用相同的sockaddr_in吗?
- NS-3中的节点和UDP实现
- UDP轮询插座和C 中的多播
- UDP通信中的端口和IP地址用法
- 增加 UDP 套接字中的接收缓冲区
- 在cygwin(windows)和gcc/g++mac中的udp客户端服务器
- 在C++/Qt中的UDP服务器客户端聊天
- 如何将 UDP 消息发送到局域网中的每台计算机
- UDP TX/RX 中的套接字错误
- 序列化C++中的矢量以通过 UDP 套接字发送
- 无法通过C中的UDP套接字接收完整的整数数组
- UDP数据包到LAN中的特定IP