繁体   English   中英

Linux C流套接字中的TCP机制

[英]TCP mechanism in Linux C stream socket

我在Linux C程序中使用TCP流套接字来传输数据。 我的问题是:丢包怎么办?

Linux套接字是否实现了TCP数据包恢复机制,以便丢失的数据包在丢失后会在超时后重新发送? 还是我必须检查send()返回值并在数据为零时重新发送数据?

您使用的是TCP套接字还是Unix域套接字(当您使用ls -l时,在文件系统中以's'作为文件类型出现在文件系统中),您的问题并不清楚。 但是,在这两种情况中的任何一种情况下,答案都是肯定的,它们实现了数据包恢复(但是从unix套接字中丢失/恢复的数据并不多),并且没有,您不必重新发送数据。

您仍然应该检查send()是否有错误; 由于有人刚拔下网络电缆,或者您的send()可能会溢出内部缓冲区,导致部分发送(还有许多其他原因导致发送可能出错),因此连接可能已断开。 但是,一旦使用send() ,并且其返回值并不表明它“忘记”了某些数据,就可以完成。

请注意,在send()完成之后以及接收方获取所有数据之前,连接可能仍会断开。 唯一的检查方法是让接收方确认数据,然后在发送方进行确认。 (我这里不是在谈论TCP ACK)。 但是,那么在接收器获取所有数据之后以及获得完整的ACK之前,您的连接可能会中断。 如果确实需要防止这种情况,则必须实施某种事务处理方案,在连接断开后重新连接,并询问接收方处理了哪些事务,然后重新发送其他事务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM