title: How do I fix the error "Only one usage of each socket address (protocol/network address/port) is normally permitted"?
body: <p>I've done a lot of googling but not had much luck with my issues. I am new to network programming and trying to learn, I've attempted to set up a simple server &amp; client that communicate (following an online tutorial located here -> <a href="http://tech.pro/tutorial/704/csharp-tutorial-simple-threaded-tcp-server" rel="noreferrer">http://tech.pro/tutorial/704/csharp-tutorial-simple-threaded-tcp-server</a>)</p>
  
  <p>The issue I'm having is that I keep getting the exception "Only one usage of each socket address (protocol/network address/port) is normally permitted" when trying to start the TcpListener on the server.</p>
  
  <p>I've tried disabling my firewall, changing the port to be used, moving variables around but to no avail (the client works fine, but it obviously can't find the server because I cannot launch it).</p>
  
  <p>I've seen solutions describing the use of Socket.Poll() but since I'm only using the TcpListener object, I have no idea how to make use of the Poll function.</p>
  
  <p>My code: </p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Net.Sockets;
  using System.Net;
  using System.Threading;
  using System.Text;
  
  namespace ServerTutorial {
  class Server {
      private readonly Thread m_listenThread;
  
      public Server() {
          m_listenThread = new Thread(new ThreadStart(ListenForClients));
          m_listenThread.Start();
      }
  
      public void ListenForClients() {
          var listener = new TcpListener(IPAddress.Any, 3000);
          listener.Start();
  
          while (true) {
              //Blocks until a client has connected to the server
              TcpClient client = listener.AcceptTcpClient();
  
              //Send a message to the client
              var encoder = new ASCIIEncoding();
              NetworkStream clientStream = client.GetStream();
              byte[] buffer = encoder.GetBytes("Hello Client!");
              clientStream.Write(buffer, 0, buffer.Length);
              clientStream.Flush();
  
              //Create a thread to handle communication with the connected client
              var clientThread = new Thread(new ParameterizedThreadStart(HandleClient));
              clientThread.Start(client);
          }
      }
  
      private void HandleClient(object clientObj) { //Param thread start can only accept object types, hence the cast
          var client = (TcpClient) clientObj;
          NetworkStream clientStream = client.GetStream();
  
          var message = new byte[4096];
  
          while (true) {
              int bytesRead = 0;
  
              try {
                  //Block until a client sends a message
                  bytesRead = clientStream.Read(message, 0, 4096);
              } catch {
                  //A socket error has occurred
                  System.Diagnostics.Debug.WriteLine("A socket error has occured");
                  break;
              }
  
              if (bytesRead == 0) {
                  //The client has disconnected from the server
                  System.Diagnostics.Debug.WriteLine("A client has disconnected from the server");
                  client.Close();
                  break;
              }
  
              //Message has been received
              var encoder = new ASCIIEncoding();
              System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
          }
      }
  }
  }
  </code></pre>
  
  <p>In my main method:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  
  namespace ServerTutorial {
  class Program {
      static void Main(string[] args) {
          var server = new Server();
          server.ListenForClients();
      }
  }
  }
  </code></pre>
  
  <p>Any help is hugely appreciated!</p>