title: C# Socket Exception : an attempt was made to access a socket in a way forbidden by its access permissions
body: <p>This is my code what I am using. This is the code I got from the internet, They said it is working fine. The comments for this also good but I don't understand why it is not working for me. And one more thing I am using this application as user mode not in a administrator mode.</p>
  
  <pre><code>private void btnStart_Click(object sender, EventArgs e)
      {
          if (cmbInterfaces.Text == "")
          {
              MessageBox.Show("Select an Interface to capture the packets.", "MJsniffer", 
                  MessageBoxButtons.OK, MessageBoxIcon.Error);
              return;
          }
          try
          {
              if (!bContinueCapturing)        
              {
                  //Start capturing the packets...
  
                  btnStart.Text = "&amp;Stop";
  
                  bContinueCapturing = true;
  
                  //For sniffing the socket to capture the packets has to be a raw socket, with the
                  //address family being of type internetwork, and protocol being IP
                  Console.WriteLine("1");
                  mainSocket = new Socket(AddressFamily.InterNetwork,
                      SocketType.Raw, ProtocolType.IP);
                  Console.WriteLine("2");
                  //Bind the socket to the selected IP address
                  mainSocket.Bind(new IPEndPoint(IPAddress.Parse(cmbInterfaces.Text), 0));
                  Console.WriteLine("3");
                  //Set the socket  options
                  mainSocket.SetSocketOption(SocketOptionLevel.IP,            //Applies only to IP packets
                                             SocketOptionName.HeaderIncluded, //Set the include the header
                                             true);                           //option to true
                  Console.WriteLine("4");
                  byte[] byTrue = new byte[4] {1, 0, 0, 0};
                  byte[] byOut = new byte[4]{1, 0, 0, 0}; //Capture outgoing packets
  
                  //Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
                  mainSocket.IOControl(IOControlCode.ReceiveAll,              //Equivalent to SIO_RCVALL constant
                                                                              //of Winsock 2
                                       byTrue,                                    
                                       byOut);
  
                  //Start receiving the packets asynchronously
                  mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
                      new AsyncCallback(OnReceive), null);
              }
              else
              {
                  btnStart.Text = "&amp;Start";
                  bContinueCapturing = false;
                  //To stop capturing the packets close the socket
                  mainSocket.Close ();
              }
          }
          catch (SocketException ex)
          {
              Console.WriteLine("5");
              MessageBox.Show(ex.Message, "MJsniffer", MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
          catch (Exception ex)
          {
              Console.WriteLine("6");
              MessageBox.Show(ex.Message, "MJsniffer", MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
      }
  </code></pre>