当前位置: 技术问答>linux和unix
在accept()到receive()这个时间段内缓冲区有没有可能被覆盖或者接受到新数据?
来源: 互联网 发布时间:2017-04-30
本文导语: 当我accept一个连接后,貌似真正接受到的数据缓冲在sockfd这个结构对象里,通常需要把sockfd里的缓冲数据通过recv()搬到我自己定义的char* BUF里。问题来了,既然已经建立了连接,如果这个连接工作很忙,TCP通信管道...
当我accept一个连接后,貌似真正接受到的数据缓冲在sockfd这个结构对象里,通常需要把sockfd里的缓冲数据通过recv()搬到我自己定义的char* BUF里。问题来了,既然已经建立了连接,如果这个连接工作很忙,TCP通信管道是源源不断的发来数据包,那我在recv()的过程中sockfd里面缓冲前一段数据有没有可能被后面发来的数据覆盖或者追随(就是str1+str2),不知道底层对缓冲sockfd里的缓冲是如果处理的?
|
没有可能哈, 数据是顺序读到的.
|
接收数据时内核帮我们做好了,当内核协议栈buf接收到就会返回ack,如果buf满了,则不回ack,传输速率减半,发送端会一直重传,所以一般在大流量的情况下,会将接收buf改大
|
tcp不会覆盖的,满了,不会接受的。UDP就会丢数据了。
|
不会的recv都是定长接收数据流的!不会覆盖的!满了就会等待下次接收的!
|
这个和内核双链表什么的,等等都没关系,TCP协议决定的,当满了,会通知发送方,不要发了。等待。
UDP肯定会丢数据的。
而且内核给的缓冲是有限的。可以设置。
UDP肯定会丢数据的。
而且内核给的缓冲是有限的。可以设置。
|
不会的!没有接收及不及时这说,发送出去了,如果没有得到对方的确认的话,会重新发送数据的!
|
内核采用双向链表来处理数据包,可以动态分配的
|
前面说的都挺好,学习了
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。