非阻塞的SOCKET莫明其秒被阻塞了。这是我看到的现像,感觉并不是本质。我使用一个非阻塞的SOCKET去发送多播数据,一切都很正常,突然,可能是在几分钟后,也可能是在一天后,sendto函数停在自己身上了,怎么样也不行了整个网络模块就这样死掉了。我心那个伤啊!为啥啊听有人讲,说是我可能发得太快,把下面的系统BUF给撑爆了。于是乎我发一个包延了个三毫秒,感觉好像是不错呢,平均坚持时间感觉是长了不少。有这种讲法吗?我认为下面如果收不了只会丢包呀,怎么会爆呢?但是我也实在是找不到其它原因了。
再没有人救我我就得去自刎了……PS:我的系统缓冲是16K,包是1032BYTE一个。
使用的语言是standard C,SOCKET是标准SOCKET,非WINSOCK。
再没有人救我我就得去自刎了……PS:我的系统缓冲是16K,包是1032BYTE一个。
使用的语言是standard C,SOCKET是标准SOCKET,非WINSOCK。
sendto发送第一包以后不要用sleep 浪费cpu资源,sleep不一定是正好的系统发包时间
用select()函数 绑定udp socket的 write事件
发包以后 等待udp socket的 write事件
然后在调用 sendto()发送第2个数据包
但是又没有办法调试,没调试器。
只有凭经验看哪儿有可能性出问题,再去DP。to 楼上两位,我试着发512还是出问题。重申一个现象:就是我发包后睡了三个豪秒就能坚持很久。我要死掉啦~~ 对了,今天返回了一个错误:23525,我不论在哪儿也查不到这个错误,郁闷。
例如:
if( Send(……)== SOCKET_ERROR)if (GetLastError() == WSAEWOULDBLOCK)
{
TRACE("Blocking\n");
Sleep(100);
break;
}
我试过快速发送数据,缓冲区被填满,会返回错误,并且wsagetlasterror为10035。
这时需要稍微sleep一下。10毫秒就够了