请高手支招!不是高手的支声也行!非阻塞的SOCKET莫明其秒被阻塞了。。。

rabo 2005-06-28 03:04:03
非阻塞的SOCKET莫明其秒被阻塞了。这是我看到的现像,感觉并不是本质。

我使用一个非阻塞的SOCKET去发送多播数据,一切都很正常,突然,可能是在几分钟后,也可能是在一天后,sendto函数停在自己身上了,怎么样也不行了。。。整个网络模块就这样死掉了。我心那个伤啊!为啥啊。。。

听有人讲,说是我可能发得太快,把下面的系统BUF给撑爆了。于是乎我发一个包延了个三毫秒,感觉好像是不错呢,平均坚持时间感觉是长了不少。。。。有这种讲法吗?我认为下面如果收不了只会丢包呀,怎么会爆呢?但是我也实在是找不到其它原因了。


再没有人救我我就得去自刎了……

PS:我的系统缓冲是16K,包是1032BYTE一个。
使用的语言是standard C,SOCKET是标准SOCKET,非WINSOCK。
...全文
245 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
teli_eurydice 2005-06-30
  • 打赏
  • 举报
回复
友情UP
ddgfei 2005-06-30
  • 打赏
  • 举报
回复
发送快只会阻塞,不会死掉得!!可以在发送之前判断是否阻塞
例如:
if( Send(……)== SOCKET_ERROR)

if (GetLastError() == WSAEWOULDBLOCK)
{
TRACE("Blocking\n");
Sleep(100);
break;
}
softrain 2005-06-30
  • 打赏
  • 举报
回复
有点畸形哦。
我试过快速发送数据,缓冲区被填满,会返回错误,并且wsagetlasterror为10035。
这时需要稍微sleep一下。10毫秒就够了
CodeProject-Jerry 2005-06-30
  • 打赏
  • 举报
回复
ddgfei 2005-06-30
  • 打赏
  • 举报
回复
我得方法你可以试一试,估计是阻塞得原因
rabo 2005-06-30
  • 打赏
  • 举报
回复
谢谢大家,我虽然还没有找到错误的根本原因,但是我用其他方法补救了,我用另一个任务来监视这个任务,一但死了就重起这个任务。。效果还不错,可惜是没有找到根本原因。
AntonlioX 2005-06-29
  • 打赏
  • 举报
回复
mark
daqingmh 2005-06-29
  • 打赏
  • 举报
回复
udp 数据包一次发送到端口的数据量为512个字节!
sendto发送第一包以后不要用sleep 浪费cpu资源,sleep不一定是正好的系统发包时间
用select()函数 绑定udp socket的 write事件
发包以后 等待udp socket的 write事件
然后在调用 sendto()发送第2个数据包
xift_2008 2005-06-29
  • 打赏
  • 举报
回复
包长度设小一点看看效果是不是好一点呢???
wangrong1478 2005-06-29
  • 打赏
  • 举报
回复
ding
Jasanye 2005-06-29
  • 打赏
  • 举报
回复
发得再快也不会有问题,我的通信类在做压力测试的时候,6台机子做客户端,每天机子600百个客户端,不停的发数据,而且还每隔1秒关闭一个客户端,然后再建一个客户端。服务器端运行好好的,没有任何问题。
看你的问题有可能是内存泄漏,好好查查代码吧
waterczh 2005-06-29
  • 打赏
  • 举报
回复
关注
xift_2008 2005-06-29
  • 打赏
  • 举报
回复
错误码好像都是4位,怎么会有23525呢?
rabo 2005-06-29
  • 打赏
  • 举报
回复
to Jasanye(叶子)

我也认为是其它地方有溢出等可能性。
但是又没有办法调试,没调试器。
只有凭经验看哪儿有可能性出问题,再去DP。

to 楼上两位,我试着发512还是出问题。

重申一个现象:就是我发包后睡了三个豪秒就能坚持很久。

我要死掉啦~~ 对了,今天返回了一个错误:23525,我不论在哪儿也查不到这个错误,郁闷。
UDX协议 2005-06-28
  • 打赏
  • 举报
回复
发的再快也不会死掉。
rabo 2005-06-28
  • 打赏
  • 举报
回复
如果太快,真的会死掉吗?

现在的现像是那个线程就停在sendto这句上了。也不返回错误。
oyljerry 2005-06-28
  • 打赏
  • 举报
回复
自己修改一下发送等参数,看结果怎么样
wwwsq 2005-06-28
  • 打赏
  • 举报
回复
不要死循环的调用sendto函数。
qrlvls 2005-06-28
  • 打赏
  • 举报
回复
你需要根据实际情况自己想办法判断,如果速度太快的话在驱动层确实会进行保护
rabo 2005-06-28
  • 打赏
  • 举报
回复
咦?我怎么看不到自己的贴子?

18,356

社区成员

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

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