如何清空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 受到上一次流程发出的包
如何处理?(安全产品:由于安全的原因不可以多次连接)
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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(....) ;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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