tcp传输超时的问题

xiangbei0707 2014-05-28 08:52:35
1 send操作只是将数据写入socket缓冲区就返回,然后协议栈负责将数据发送出去并确认,当数据丢失或是ack丢失,会重传数据,这个重传一般会有次数或是时间限制,我想问超过这个限制后tcp是怎么处理的,会不会通知客户进程,怎么通知?

2 假设客户端主动断开连接,会发送一个syn到服务端,服务端收到syn后回复ack,如果之时候服务端不去读而是去写数据,会有什么样的结果?
...全文
186 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
碼上道 2014-05-28
  • 打赏
  • 举报
回复
引用 楼主 xiangbei0707 的回复:
1 send操作只是将数据写入socket缓冲区就返回,然后协议栈负责将数据发送出去并确认,当数据丢失或是ack丢失,会重传数据,这个重传一般会有次数或是时间限制,我想问超过这个限制后tcp是怎么处理的,会不会通知客户进程,怎么通知? 2 假设客户端主动断开连接,会发送一个syn到服务端,服务端收到syn后回复ack,如果之时候服务端不去读而是去写数据,会有什么样的结果?
》》服务端要发了fin后才表示不需要发数据了,这时还能写数据的。
mujiok2003 2014-05-28
  • 打赏
  • 举报
回复
引用 2 楼 xiangbei0707 的回复:
connection reset by peer 这个是抛异常? 第二个弄错了,是fin,问题还是问这个
不是异常,如果重传多次仍不能收到ACK的话, 一般会设置错误码(errno)。 有些library也会throw exception, 比如boost::asio, 但那是在应用层做的转换。
mujiok2003 2014-05-28
  • 打赏
  • 举报
回复
被动断开一方再确认FIN之后是可以发送数据的,但是不不必接收数据了。
xiangbei0707 2014-05-28
  • 打赏
  • 举报
回复
connection reset by peer 这个是抛异常? 第二个弄错了,是fin,问题还是问这个
mujiok2003 2014-05-28
  • 打赏
  • 举报
回复
1. connection reset by peer 2. 断开时发送的是FIN, 不是syn.

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧