免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3317 | 回复: 9
打印 上一主题 下一主题

recv函数的讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-31 16:01 |只看该作者 |倒序浏览
发送和接收都会有个缓冲区,如果,发送程序(在主机A)一直向接收程序(在主机B)发送数据,假设期间发送程序发出的数据都能正确的发到接收程序,即,发送程序的send或者write都返回正确,那么如果接受程序一直不去recv或者read,那么数据就回一直在系统的接收缓冲区里面直到接收缓冲区满了为止。。。。那么此时,发送程序还能将数据发到接收程序吗?send或者write能赶会成功吗?
请各位指教。。。。
PS:先搜了一下,好象没我这个主题的帖子

论坛徽章:
0
2 [报告]
发表于 2008-10-31 16:06 |只看该作者
原帖由 alexhappy 于 2008-10-31 16:01 发表
发送和接收都会有个缓冲区,如果,发送程序(在主机A)一直向接收程序(在主机B)发送数据,假设期间发送程序发出的数据都能正确的发到接收程序,即,发送程序的send或者write都返回正确,那么如果接受程序一直 ...

客户端貌似只管发吧
服务端满了就自动discard了。。。

论坛徽章:
0
3 [报告]
发表于 2008-10-31 16:10 |只看该作者
原帖由 blizzard213 于 2008-10-31 16:06 发表

客户端貌似只管发吧
服务端满了就自动discard了。。。

你的意思是,接收程序那边的接收缓冲区满了,发送程序的发送就会失败?

论坛徽章:
0
4 [报告]
发表于 2008-10-31 19:15 |只看该作者

回复 #3 alexhappy 的帖子

接收端一般两种策略:
1、丢弃,也就是说不理你发送过来的数据。
2、循环使用缓冲区,即把原来接收的覆盖掉。

你的send或者write应该不会报错失败的,发送端啥时候管到接收端满不满了。如果要管,也得你自己写程序让发送端和接收端配套实现。

论坛徽章:
0
5 [报告]
发表于 2008-10-31 19:27 |只看该作者
如果对方的系统接收缓冲区满了,再发送会失败的

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
6 [报告]
发表于 2008-10-31 20:29 |只看该作者
原帖由 alexhappy 于 2008-10-31 16:01 发表
发送和接收都会有个缓冲区,如果,发送程序(在主机A)一直向接收程序(在主机B)发送数据,假设期间发送程序发出的数据都能正确的发到接收程序,即,发送程序的send或者write都返回正确,那么如果接受程序一直 ...



只有对方的接收缓冲区和本地的发送缓冲器都满了的时候才出错

论坛徽章:
0
7 [报告]
发表于 2008-10-31 20:40 |只看该作者
同意楼上

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
8 [报告]
发表于 2008-10-31 21:04 |只看该作者
TCP会进行流量控制,服务端接收缓存区满了,会用ACK通知客户端其接收窗口为零,客户端停止发送,当客户端发送缓存区也满了后,程序write会阻塞,如果socket设置O_NONBLOCK,程序出错返回

论坛徽章:
0
9 [报告]
发表于 2010-09-06 09:15 |只看该作者
TCP会进行流量控制,服务端接收缓存区满了,会用ACK通知客户端其接收窗口为零,客户端停止发送,当客户端发 ...
timespace 发表于 2008-10-31 21:04



           您这个是说的是TCP 缓存吧,LZ 说的是应用层的缓存。是吧

论坛徽章:
0
10 [报告]
发表于 2010-09-06 10:42 |只看该作者
这么老的帖子都挖出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP