如何防止TCP socket 因缓冲区溢出而断开连接

yongta 2009-08-07 12:38:59
如何防止TCP socket 因缓冲区溢出而断开连接?
当发送数据很快时,缓冲区肯定会爆满,此时继续发,接收端接收不过来,如何处理
...全文
573 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
WinEggDrop 2009-08-08
  • 打赏
  • 举报
回复
这发送数据的速度不是由你的程序说了算的,是由系统本身可发送缓冲说了算了。如果系统缓冲都满了,根本就发不出数据,你的程序还拼命发送的话,那么send(),WSASend()都会返回错误。
yongta 2009-08-07
  • 打赏
  • 举报
回复
定一下
bylea 2009-08-07
  • 打赏
  • 举报
回复

char *pBuffer=new char[lTotalSize];//
int nRecvLen = 0;

while(nRecvLen <lTotalSize)
{
int nRecvTemp = recv(s,pBuffer+nRecvLen ,lTotalSize-nRecvLen,0); //偏移已使用缓冲区长度,第三个参数是剩余可用的缓冲区
if( nRecvTemp <=0 )
break;//出错了,就要退出

//接收正确,加上接收的数据长度
nRecvLen +=nRecvTemp ;
}


这是以前回答别人问题写的,在这里给复制过来.

另:定时器发送只是处理罗辑,和TCP传送本身没关系.
yongta 2009-08-07
  • 打赏
  • 举报
回复
我的时返回了10055错误了
yongta 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bylea 的回复:]
引用楼主 yongta 的回复:
如何防止TCP socket 因缓冲区溢出而断开连接?
当发送数据很快时,缓冲区肯定会爆满,此时继续发,接收端接收不过来,如何处理


理解上的错误:接收的不接收,发送端是不会发送的.
[/Quote]
哦,我的发送是通过定时器控制,周期循环发送,直至连接断开才停止定时器.
yongta 2009-08-07
  • 打赏
  • 举报
回复
谢谢大家,确实是.
之前处理错误了.我每当发送数据返回SOCKET 错误时便断开连接,
bragi523 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 yongta 的回复:]
如何防止TCP socket 因缓冲区溢出而断开连接?
当发送数据很快时,缓冲区肯定会爆满,此时继续发,接收端接收不过来,如何处理
[/Quote]

网络断开肯定是你自己的处理
send的时候返回WSAEWOULDBLOCK错误的时候不要断开网络
bylea 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 yongta 的回复:]
如何防止TCP socket 因缓冲区溢出而断开连接?
当发送数据很快时,缓冲区肯定会爆满,此时继续发,接收端接收不过来,如何处理
[/Quote]

理解上的错误:接收的不接收,发送端是不会发送的.
gotooker 2009-08-07
  • 打赏
  • 举报
回复
顶楼上,不会断开的
w29468 2009-08-07
  • 打赏
  • 举报
回复
会断开吗?缓冲区满了发送函数会返回失败吧

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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