有没有办法让send()等待所有已发送的数据已被确认(或者如果已达到ACK超时则返回-1),或者是否有其他机制等待在send()之后但在做其他事情之前确认?
我使用的是标准的Unix Berkeley套接字API.
我知道我可以实现一个应用层ACK,但是当TCP的ACK很好地完成目的时,我宁愿不这样做.
AFAIK没有办法.
此外,它不可靠,ACK仅表示内核接收到数据,同时客户端或其计算机可能已崩溃.您会认为客户端收到了数据,但实际上它从未处理过.
不幸的是,标准 API 没有保留任何适当的方法来做到这一点。有可能是查询当前TCP发送窗口大小/使用的一种方式,但不幸的是它可能不是由标准的手段进行查询。
当然,有一些棘手的方法可以实现您想要的。例如,在 Windows 上,可以创建一个网络过滤器驱动程序来监视数据包级别的流量。