码迷,mamicode.com
首页 > 其他好文 > 详细

mono 3.10 Socket引发未知异常的悲剧事情...

时间:2014-10-07 00:36:32      阅读:405      评论:0      收藏:0      [点我收藏+]

标签:des   style   io   os   ar   sp   问题   c   on   

        最近在做mono 3.10针对socket性能方面的测试,在想对压力比较高的情况下发现了mono的一个bug会导致程序引发未知异常从而导致程序结束的严重问题.

错误信息

Unhandled Exception:
System.InvalidOperationException: EndSend can only be called once per
asynchronous operation
  at System.Net.Sockets.Socket.EndSend (IAsyncResult asyncResult,
System.Net.Sockets.SocketError& errorCode) [0x00000] in <filename unknown>:0 
  at System.Net.Sockets.Socket.EndSend (IAsyncResult result) [0x00000] in
<filename unknown>:0 
  at System.Net.Sockets.SocketAsyncEventArgs.SendCallback (IAsyncResult ares)
[0x00000] in <filename unknown>:0 
  at System.Net.Sockets.SocketAsyncEventArgs.DispatcherCB (IAsyncResult ares)
[0x00000] in <filename unknown>:0
epoll(ADD): 9 Bad file descriptor

          从代码上来看是由Socket.EndSend引发的异常没有被处理,看样子是由epoll导面抛出的.SocketAsyncEventArgs.SendCallback的处理代码如下:

internal void SendCallback (IAsyncResult ares)
		{
			try {
				BytesTransferred = curSocket.EndSend (ares);
			} catch (SocketException se){
				SocketError = se.SocketErrorCode;
			} catch (ObjectDisposedException) {
				SocketError = SocketError.OperationAborted;
			} finally {
				OnCompleted (this);
			}
		}
          从代码上看来应该是有些异常没有处理,显然epool(add):9 Bad file descriptor应该是一个file io异常,由于以上代码没有catch....结果悲剧的事情发生了.(问题已经提交到mono团队,希望他们能处理一下这个问题)

mono 3.10 Socket引发未知异常的悲剧事情...

标签:des   style   io   os   ar   sp   问题   c   on   

原文地址:http://my.oschina.net/ikende/blog/324545

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!