当前位置: 代码迷 >> C# >> msdn中例子Socket.AcceptAsync如何避免无限递归
  详细解决方案

msdn中例子Socket.AcceptAsync如何避免无限递归

热度:74   发布时间:2016-05-05 03:47:03.0
msdn中例子Socket.AcceptAsync怎么避免无限递归
本帖最后由 lidanger 于 2014-01-21 08:29:57 编辑
msdn上面说。。
如果 I/O 操作挂起,将返回 true。操作完成时,将引发 context 参数的 SocketAsyncEventArgs..::.Completed 事件。

如果 I/O 操作同步完成,将返回 false。将不会引发 context 参数的 SocketAsyncEventArgs..::.Completed 事件,并且可能在方法调用返回后立即检查作为参数传递的 context 对象以检索操作的结果。

有人说一般不会遇到此种问题,但数据量很大的情况下,经常会出现。。

每次一出现非异步的时候总会出现无限递归,导致堆栈溢出而退出。。我了个去。。我改了很长时间,包括加入异步线程池和改成循环来避免递归,但都造成慢慢拒绝连接了

有没有人遇到此问题?

google上搜了,没见到解决问题的。。
http://www.askques.com/2437155/how-does-this-not-cause-a-stack-overflow
------解决思路----------------------
晕 上代码 
别人写没有无限递归 你写有肯定是你的问题
------解决思路----------------------
最简单的方法,加一个ManualResetEvent,
在循环开始的时候 reset,  
在complete或者收到连接后Set,
在AcceptAsync之后 WaitOne.
------解决思路----------------------
socket通信,网上完整例子很多,搜一个参考一下,不要自己靠拍脑袋想,靠这里抄一句那里抄一句的拼凑
  相关解决方案