1.send函数什么时候返回?
不准确的说,当你要send的数据成功放入发送缓冲区的时候,就返回了,这个send实际是指把数据发送给了TCP的协议栈。
2.既然send函数不保证送达,那么为什么说TCP是可靠传输?
是的,你把数据交给TCP之后,TCP就保证数据准确无误地传送到对方,但是TCP不是万能的,比如突然断网时就有数据还在缓存里没发出去。
3.用TCP发送数据时,需要对方返回确认信息来判断是否全部收到么?
分情况,如果只是发送数据,而且支持续传,那么可以不关心这一点。
如果要保证数据完整的传输,也可以根据TCP是否正常关闭来检测。
如果数据传输完后,连接还要继续传送其他数据,那么最好是返回一个确认信息。
但是个人推荐做好允许意外断开,比如断点续传的方式。