【libevent】TR_NET UDP

本文深入探讨了UDP协议的特性,对比TCP的面向连接性,详细介绍了UDP套接字的sentto和recvfrom函数,以及普通UDP套接字存在的异步错误问题。通过分析为何进程无法接收到端口不可达的ICMP,指出使用`connect`函数对UDP套接字进行“连接”以处理异步错误。同时,讲解了libevent在UDP编程中的应用,如tr_udpInit的实现和缓存设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UDP协议是相对于TCP协议不是面向连接的,也是不可靠的,因此UDP套接字编程在思路上和TCP套接字编程很不一样。

普通的UDP套接字

sentto函数和recvfrom函数

  • sentto函数和recvfrom函数比面向连接(稍后并不仅指TCP)的send和recv函数多了flag和表示送达和接收地址的SA。
  • 容易看到这两个函数是适合UDP这样的无连接协议的。对于客户端来说,相当于将connect函数功能去掉,然后每次都显式传地址。对于服务端来说,它也不需要accept函数,每次recvfrom过来,它都可以取到这是从谁发过来的。甚至recvfrom的SA参数可以设为nullptr,这样表示我接受所有信息,不管是谁发的。
  • 注意recvfrom传入的最后一个长度参数必须是已经初始化后的。否则UDP函数返回的地址和端口都会是0。

普通的UDP套接字存在的问题

异步错误
上面这样的设计看起来似乎很好,但考虑当服务端进程未开启,那从客户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值