Linux 当我使用TCP发送数据时,如何知道数据是否已到达?

Linux 当我使用TCP发送数据时,如何知道数据是否已到达?,linux,tcp,tcp-ip,Linux,Tcp,Tcp Ip,当我使用TCP发送数据时,write()函数只确保数据已复制到TCP发送缓冲区,但如果TCP未成功发送数据,我怎么知道?有信号吗?还是什么?简短回答:你没有。传统上,远程TCP对等方发送响应,确认您的数据。这是在传输级协议TCP之上构建应用程序级协议的第一步 更长的答案:这个问题是HTTP、STOMP、IMAP等更高级别协议的主要动机 但是如果TCP没有成功发送数据,我怎么知道呢 write()系统调用可以返回-1并设置errno以指示错误,但是您无法知道远程对等方收到了多少数据,有多少没有收到

当我使用TCP发送数据时,
write()
函数只确保数据已复制到TCP发送缓冲区,但如果TCP未成功发送数据,我怎么知道?有信号吗?还是什么?

简短回答:你没有。传统上,远程TCP对等方发送响应,确认您的数据。这是在传输级协议TCP之上构建应用程序级协议的第一步

更长的答案:这个问题是HTTP、STOMP、IMAP等更高级别协议的主要动机

但是如果TCP没有成功发送数据,我怎么知道呢

write()
系统调用可以返回
-1
并设置
errno
以指示错误,但是您无法知道远程对等方收到了多少数据,有多少没有收到。这个问题最好由远程对等方来回答


M.

因此,如果我将()数据写入发送缓冲区,并且数据没有到达远程对等方,我将不会知道此事件,除非我要求远程对等方向我发送响应?基本上,是的。当您调用
write()
时,意味着字节已经到达了本地套接字缓冲区,可能不会再进一步了。很荣幸。你能给你的问题分配更多的标签来澄清你在使用哪个平台吗?我假设POSIX/UNIX/Linux。。但我可能弄错了。