writev函数发信导致客户端程序中止问题

latachong 2008-12-04 12:03:29
想问网络通信高手们一个问题

如果我调用writev函数客户端给服务端发信,但是服务端我设置一直拒绝接受,并且不切断通信socket。那么客户端发的信息会一直成功的发到socket上,但是服务器端则会丢失。

如果这种情况一直持续下去,会导致writev函数返回什么错误,或者收到什么中止的信号么?客户端发的信息会一直存在socket上,一直到缓冲区满么?
...全文
80 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
threeleafzerg007 2008-12-04
  • 打赏
  • 举报
回复
我这个菜鸟尝试回答一下


如果是TCP的话,你可以用tcpdump看看 ,可以预料的是 服务器 一旦自己的recvbuf满了之后 但应用程序没有接受recvbuf的数据 则会 ack当前 数据报 但是 advertised window 为0 而客户端收到此报文后 不会再发送带有数据的数据报 而是 启动1个坚持定时器 根据指数退避的算法 开始以 5 12 24秒等等 发送探查报文 了解另一端的 advertised window的大小。 并且一直不间断(和超时重传有点不同)
程序会 hang在writev调用上 除非你设置了 O_NONBLOCK

如果是UDP的话 我想客户端不会关心 server端收到情况 继续发 除非你在应用程序里加了 自己规定的协议。所以,

程序 运行正常。

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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