Merge pull request #463 from strawd/concurrent-requests
[mono.git] / mcs / class / System.ServiceModel / System.ServiceModel.Channels / ReplyChannelBase.cs
index 9a66a32450063f6085f71f90d25a90a5f3b7e081..4e47ecf0035d8fda5470806c3f5ad8686b0c21f7 100644 (file)
@@ -29,11 +29,13 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Net;
+using System.Net.Sockets;
 using System.Net.Security;
 using System.ServiceModel;
 using System.ServiceModel.Description;
 using System.ServiceModel.Security;
 using System.Threading;
+using System.Xml;
 
 namespace System.ServiceModel.Channels
 {
@@ -125,12 +127,29 @@ namespace System.ServiceModel.Channels
                                        }
                                        try {
                                                return TryReceiveRequest (tout, out ctx);
+                                       } catch (XmlException ex) {
+                                               Console.WriteLine ("Xml Exception (Dropped Connection?):" + ex.Message);
+                                               //on dropped connection, 
+                                               //whatever you do don't crash
+                                               //the whole app.  Ignore for now
+                                       } catch (SocketException ex) {
+                                               Console.WriteLine ("Socket Exception (Dropped Connection?):" + ex.Message);
+                                               //on dropped connection, 
+                                               //whatever you do don't crash
+                                               //the whole app.  Ignore for now
+                                       } catch (IOException ex) {
+                                               Console.WriteLine ("I/O Exception (Dropped Connection?):" + ex.Message);
+                                               //on dropped connection, 
+                                               //whatever you do don't crash
+                                               //the whole app.  Ignore for now
                                        } finally {
                                                lock (async_result_lock) {
                                                        currentAsyncResults.Remove (result);
                                                        currentAsyncThreads.Remove (Thread.CurrentThread);
                                                }
                                        }
+                                       ctx = null;
+                                       return false;
                                        });
                        RequestContext dummy;
                        lock (async_result_lock) {