title: How do I stop SocketException: "A blocking operation was interrupted by a call to WSACancelBlockingCall" from being thrown?
body: <p>Could you help me to get rid of this exception:</p>
  
  <blockquote>
    <p>System.Net.Sockets.SocketException: "A blocking operation was
    interrupted by a call to WSACancelBlockingCall"</p>
  </blockquote>
  
  <ol>
  <li><p>What the below code does: sends UDP message to the server and fetches reply
  (NAK or ACK)</p></li>
  <li><p>Code that throws exception: <code>m_receiveBytes = m_receiver.Receive(ref m_from);</code> </p></li>
  </ol>
  
  <p>Code:</p>
  
  <pre><code>public partial class _Default : System.Web.UI.Page
  { 
      static readonly object lockScheduleIem = new object();
      IPAddress m_AddressSend;
      IPAddress m_AddressRecieve;
      int m_groupPortSend;
      int m_groupPortReceive;
      IPEndPoint m_IPAddressSend;
      IPEndPoint m_IPAddressReceive;
      Byte[] m_receiveBytes;
      Thread m_thread;
      UdpClient m_receiver;
      ManualResetEvent m_mre;
      UdpClient m_sender;
      IPEndPoint m_from;
  
      protected void Page_Init(object sender, EventArgs e)
      {
          m_AddressSend = IPAddress.Parse("10.43.60.177");
          m_AddressRecieve = IPAddress.Parse("10.43.60.99");
  
          int.TryParse("60200", out m_groupPortSend);
          int.TryParse("206", out m_groupPortReceive);
  
          m_IPAddressSend = new IPEndPoint(m_AddressSend, m_groupPortSend);
          m_IPAddressReceive = new IPEndPoint(m_AddressRecieve, m_groupPortReceive);
  
          m_mre = new ManualResetEvent(false);
          m_from = new IPEndPoint(IPAddress.Any, 0);
      }
      protected void Page_Load(object sender, EventArgs e)
      {
  
      }
  
      protected void Button1_Click(object sender, EventArgs e)
      {
          try
          {
              TimeSpan timeout;
              timeout = new TimeSpan(0, 0, 0, 0, 5000);
              m_sender = new UdpClient();
              m_receiveBytes = null;
              m_receiver = new UdpClient(m_IPAddressReceive);
              m_thread = new Thread(new ThreadStart(ThreadProc));
              m_thread.Start();
              string str = string.Empty;
              using (StreamReader sr = new StreamReader(@"C:\UDPmsgArchive\UDPmsg_Of_2011_10_18_13_7_33_968_634545400539687500.xml"))
                  str = sr.ReadToEnd();
              byte[] XMLbytes = Encoding.ASCII.GetBytes(str);
              m_sender.Send(XMLbytes, XMLbytes.Length, m_IPAddressSend);
  
              m_mre.WaitOne(timeout, true);
              m_mre.Reset();
              m_receiver.Close();
  
              if (m_receiveBytes != null)
                  Response.Write(Encoding.ASCII.GetString(m_receiveBytes, 0, m_receiveBytes.Length));
              else
                  Response.Write("string.Empty");
          }
          catch (Exception ex)
          {
              Response.Write(ex.ToString());
          }
      }
  
      public void ThreadProc()
      {
          try
          {
              m_receiveBytes = m_receiver.Receive(ref m_from); // ERROR HERE
              m_mre.Set();
              m_receiver.Close();
          }
          finally
          {
              m_mre.Set();
          }
      }
  }
  </code></pre>