Closed happyxgang closed 7 years ago
这个跟udp协议本身有关,调用udp的send,不会出现返回值为EAGAIN的情况,当udp的send被过于频繁的调用,底层协议不能够把所有数据都发送出去时,数据包会被直接丢弃。因此使用udp协议,需要自己做流控
tcp返回eagain的时候包可能只发送了部分,如果不在传输层做保存发送会让业务侧出现混乱。
而udp是整包一次性发送成功或失败,且本身协议不保证可靠传输。因此当整个包发送失败的情况下,直接交由业务来做流控更合理一些。
不知道这么理解合不合适。
嗯嗯,是这个过程
多谢大大耐心回复
在阅读代码的时候看到tcp在send缓冲区满的时候会把发送内容保存到对应的buffer里面去,并设置epoll的write标记等待可写的时候回调再次发送。 为什么对udp没有做这种操作呢?