socket编程:recv(...)函数问题求救

wlz47 2003-01-02 11:49:23
这个问题折磨我两天了,从去年到今年,sigh

问题是这样的:

使用阻塞的socket 流式 TCP 服务,
(recv是阻塞调用的)

用recv(sockfd, buffer, length, 0)从网络接收数据到缓冲区buffer, 如果应该接收173个字节大小的数据,但是实际上只收到145个字节,为什么会这样?

请问怎样接收那28个没有收到的数据,不要重传的说


我试过再次调用recv()接收剩下的28个字节,但是程序就堵塞在recv()了,再也执行不下去了
头都大了,sigh

...全文
32 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlz47 2003-01-04
  • 打赏
  • 举报
回复
你是说发送方只是把数据放在缓冲区,没有完全发出去?
不太可能吧,因为接收发确实收到了部分数据

btw:tcpdump是什么,linux下自带的程序吗?
arlaichin 2003-01-03
  • 打赏
  • 举报
回复
那倒未必,它可能只是把173个字节塞到发送缓冲区.
wlz47 2003-01-02
  • 打赏
  • 举报
回复
实际上我是通过检查发送方调用send(...)后的返回值判断的,返回值确实是173,由此我认为这173个数据是发送出去了
arlaichin 2003-01-02
  • 打赏
  • 举报
回复
或分别用SO_RCVLOWAT,SO_SNDLOWAT试试吧.
arlaichin 2003-01-02
  • 打赏
  • 举报
回复
用tcpdump看看对方是否只给你发了145个字节,若是,叫对端关闭Nagle算法试试.(setsockopt(...))

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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