深入理解Socket缓冲区

深入理解Socket缓冲区

2023年7月15日发(作者:)

深⼊理解Socket缓冲区⽹络编程离不开 Socket,Socket 就是发送和接收⽹络数据,Socket 有发送缓冲也有接收缓冲,这些缓冲区有什么作⽤?是⼀个什么机理呢?这篇⽂章就是想跟⼤家分享⼀下 Socket 缓冲区的⽅⽅⾯⾯。什么是 Socket 缓冲区⾸先我们看看为什么 Socket 要有缓冲区,它起什么作⽤。 熟悉 Socket 的读者都知道,Socket 的发送和接收,就是调⽤ send 和 recv 函数。实际操作中,我们将要发送的数据 buffer,送给 send 函数,然后 send 就会返回成功或者失败,那么,send 什么时候返回成功呢?是发送到对端函数才返回吗?答案是否定的。(注意:Socket 有同步和异步,本⽂主要讨论 Socket 缓冲区,不深究异步,都假定是同步)实际上呢,Socket 有⼀个缓冲区,send 的数据 buffer,它会先发到缓冲区⾥⾯,然后由操作系统去调度发送。所以,send 返回成功,仅仅只是说明,数据放到缓冲区成功了,不代表对端接收了,更不代表对端应⽤程序正确处理了。所以我们会看到缓冲区不满的时候,send 函数很快就返回了,⽽缓冲区满的时候,send 函数会阻塞直到超时返回错误。recv 函数同理,实际上是从缓冲区获取数据,发过来的⽹络数据,系统将会放到缓冲区⾥⾯,直到 recv 函数去获取数据,才取出来,并且释放出空间。稍后我们通过实例来看这些缓冲区。如何查看 Socket 缓冲区Linux 下⾯查看 Socket 的缓冲区情况⾮常的简单,就是⽤

netstat -an 命令,它会列出所有的连接的端⼝,我们看⼀下实例在这⾥插⼊图⽚描述这⾥就指出每个 Active 的连接,主要的元素包括 Proto 协议,上图是 UDP 协议,然后是 RecvQ 和 SendQ,这就是本⽂讨论的 Socket 缓冲区,⼀个是接收缓冲,⼀个是发送缓冲,我们可以实时查看当前的状态。后⾯是本机 IP 和端⼝,以及对端的 IP 和端⼝,最后是连接状态,上图是 UDP 的所有没有状态。下⾯我们运⾏⼀个 Socket 程序,再看 netstat 状态,来感受⼀下,在这⾥插⼊图⽚描述

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689410327a243552.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信