首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基本TCP协议问题-- send()和recv()上发生了什么

基本TCP协议问题-- send()和recv()上发生了什么
EN

Stack Overflow用户
提问于 2020-03-27 01:26:55
回答 1查看 23关注 0票数 0

我有一些关于TCP协议的基本问题。

:Machine_A调用send(sockfd)将数据发送到Machine_B,send()调用成功。

问题:当send()调用返回时,是否意味着数据已经到达Machine_B?或者它刚刚被操作系统接受了?

:Machine_A调用发送(Sockfd)发送数据到Machine_B,但是application_B on Machine_B没有足够快地从套接字读取数据。Application_A正在编写10 1KB/s,而Application_B仅为1KB/秒。

问题

在这种情况下,发送()调用什么时候在Machine_A上成功?在数据提交到OS_A on Machine_A时,它是成功的还是等到收到OS_B的确认时才成功?

  • 是否需要Application_B在向OS_A?

确认之前提取数据包?

EN

回答 1

Stack Overflow用户

发布于 2020-03-27 05:01:50

send只关心将数据放入本地套接字缓冲区,即不会等待接收方计算机的ACK,甚至不会等到收件人应用程序处理数据(甚至更晚)。如果您需要这类信息,则需要一些应用程序级别的确认。此外,虽然ACK是通过TCP发送的,但无论如何也不会由其他协议(如UDP )发送。

send只有在不能将数据放入套接字缓冲区时才会失败,这可能是因为没有套接字缓冲区(套接字已关闭),或者因为套接字缓冲区已经满了,但send称为非阻塞缓冲区。如果套接字缓冲区已满,而send被称为阻塞,则它只会阻塞,直到套接字缓冲区中再次有空间为止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60878688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档