如何清空socket stream的缓冲?

herohowk 2002-02-25 11:45:56
具体问题如下:
在一个流式套接字多次发送接收,a(server) b(client)
每一次流程如下b send a recv a send b recv
在多次流程中b recv 超时会导致下一次流程b recv 受到上一次流程发出的包
如何处理?(安全产品:由于安全的原因不可以多次连接)
...全文
44 点赞 收藏 7
写回复
7 条回复
herohowk 2002年02月26日
第二种方法我也用了, 非常感谢大家, 但这都不是我想要的答案.
回复 点赞
herohowk 2002年02月25日
楼上说的我已经用了, 但我想有没有方法在client发送前清空流?
回复 点赞
garfield_82 2002年02月25日
<<flush
回复 点赞
tief 2002年02月25日
.......上面的while是for
回复 点赞
ithero 2002年02月25日
b rev 超时了,是否要重新接受呢?我刚刚学socket,不明白的问。
回复 点赞
jyc_nj 2002年02月25日
清空总要有个依据吧,你不去判断,就flush掉好象不太安全,所以觉得glxSearoc(黑土豆)说得方法不错,再先判断再清空也不浪费多少时间吧.
回复 点赞
tief 2002年02月25日
先用select判断缓冲区是否还有数据,有的话就接收并且丢弃,如此就Ok:)

以下是大致的实现方法:

int iRet ;
timeval tSelDelay ;

tSelDelay.tv_sec=0 ;
tSelDelay.tv_usec=1 ;

while ( ;; )
{
iRet = select(0,&fsRecvAddr,NULL,NULL,&tSelDelay) ;
if (iRet==0) break ;
recv(....) ;
}
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告