LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: 非飞

如何清空socket缓冲区

[复制链接]
发表于 2004-11-24 10:05:42 | 显示全部楼层
把缓冲区设置为0。
这样总是用你调用raed或者write指定的buffer作为SOCKET的缓冲区
 楼主| 发表于 2004-11-24 13:42:22 | 显示全部楼层
最初由 elssann 发表
把缓冲区设置为0。
这样总是用你调用raed或者write指定的buffer作为SOCKET的缓冲区


请问你这样使用过吗?还有这样做好象依然无法避免我所说的那个问题。

就我所知服务器发送数据给客户端的时候,先将数据发送到应用程序的数据缓冲区,剩下的工作都是由TCP来完成。而TCP需要等待接收方发来完成接收通知以后才能删除发送缓冲区里面的数据备份。
发表于 2004-11-24 14:58:05 | 显示全部楼层
最初由 非飞 发表
请问你这样使用过吗?还有这样做好象依然无法避免我所说的那个问题。

就我所知服务器发送数据给客户端的时候,先将数据发送到应用程序的数据缓冲区,剩下的工作都是由TCP来完成。而TCP需要等待接收方发来完成接收通知以后才能删除发送缓冲区里面的数据备份。


这样做了之后,就不存在清空缓冲区的问题了,因为无缓冲区可清。哈哈
发表于 2004-11-25 09:33:38 | 显示全部楼层
怎样把缓冲区设置为0??
发表于 2004-11-25 13:04:30 | 显示全部楼层
看晕了,感觉像是程序出错又找错了原因。

tcp是不会出这种问题的,应该是程序的应用层逻辑出了问题

没看到程序,只能瞎猜,说错了别见怪
发表于 2004-11-25 16:24:28 | 显示全部楼层
同感
 楼主| 发表于 2004-11-29 02:28:41 | 显示全部楼层
这几天比较忙,问题解决了也没有回来回帖,真抱歉!

其实说真的,这个问题还是困扰了我很久的,从表面的现象来看,程序所使用的通信基础模块并没有什么问题,因为一切正常是接收数据是不会出现问题的,当出现超时的情况是,程序也能在指定的超时时间后退出阻塞。后来翻了很多书,查了很多相关的资料也没有发现问题处在什么地方。最后自然的怀疑到使用的通信模块上去了,问开发部门要来网络通信模块源代码一看,差点没有晕过去,原来模块中所谓的超时是使用select的决定的,模块在等待设定的超时后,如果指定的socket还没有可读的就认为是超时,再整个代码中根本就没有找到setsockopt。也就是说发送端根本就没有收到接收端反馈的消息,一直等待接收端来接收所发送的数据,这时自然不会将所发送的被客户端认为超时的数据从发送缓冲区中将备份数据删除。
发表于 2004-11-29 09:18:09 | 显示全部楼层
应该怎样解决?
发表于 2004-11-29 09:19:12 | 显示全部楼层
怎样将发送缓冲区中备份数据删除??
发表于 2004-11-29 14:26:31 | 显示全部楼层
原来是自己写的不好啊,
晕倒!
你敢说memset不能清空?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表