title: Invalid Pointer Address error attempting to connect to TCP Socket
body: <p>I have the following .NET code. Most of it was written long before I was hired, and none of the original devs still work for us. </p>
  
  <pre><code>private void SendTCPMessage(string IpAddress, string Message)
      {
          ...
  
          //original code that fails because the Host entry produced 
          //has no elements in AddressList.
          //IPHostEntry remoteMachineInfo = Dns.GetHostEntry(IpAddress);
  
          //New code that fails when connecting
          IPHostEntry remoteMachineInfo;
  
          try
          {
              remoteMachineInfo = Dns.GetHostEntry(IpAddress);
  
              if (remoteMachineInfo.AddressList.Length == 0)
                 remoteMachineInfo.AddressList = 
                    new[]
                       {
                          new IPAddress(
                             //Parse the string into the byte array needed by the constructor;
                             //I double-checked that the correct address is produced
                             IpAddress.Split('.')
                             .Select(s =&gt; byte.Parse(s))
                             .ToArray())
                       };
          }
          catch (Exception)
          {
              //caught and displayed in a status textbox
              throw new Exception(String.Format("Could not resolve or parse remote host {0} into valid IP address", IpAddress));
          }
  
          socketClient.Connect(remoteMachineInfo, 12345, ProtocolType.Tcp);
  
          ...
      }
  </code></pre>
  
  <p>The SocketClient code of note is as follows:</p>
  
  <pre><code>    public void Connect(IPHostEntry serverHostEntry, int serverPort, ProtocolType socketProtocol)
      {
          //this line was causing the original error; 
          //now AddressList always has at least one element.
          m_serverAddress = serverHostEntry.AddressList[0];
          m_serverPort = serverPort;
          m_socketProtocol = socketProtocol;
          Connect();
      }
  
      ...
  
      public void Connect()
      {
          try
          {
              Disconnect();
              SocketConnect();
          }
          catch (Exception exception) ...
      }
  
      ...
  
      private void SocketConnect()
      {
          try
          {
              if (SetupLocalSocket())
              {
                  IPEndPoint serverEndpoint = new IPEndPoint(m_serverAddress, m_serverPort);
  
                  //This line is the new point of failure
                  socket.Connect(serverEndpoint); 
  
                  ...
              }
              else
              {
                  throw new Exception("Could not connect!");
              }
          }
          ...
          catch (SocketException se)
          {
              throw new Exception(se.Message);
          }
          ...
      }
  
      ...
  
      private bool SetupLocalSocket()
      {
          bool return_value = false;
          try
          {
              IPEndPoint myEndpoint = new IPEndPoint(m_localAddress, 0);
              socket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, m_socketProtocol);
              return_value = true;
          }
          catch (SocketException)
          {
              return_value = false;
          }
          catch (Exception)
          {
              return_value = false;
          }
          return return_value;
      }
  </code></pre>
  
  <p>When connecting to the endpoint within SocketConnect, I get a SocketException stating:</p>
  
  <blockquote>
    <p>The system detected an invalid pointer address in attempting to use a pointer argument in a call.</p>
  </blockquote>
  
  <p>Information online is a bit light on how to fix this. AFAICT, the address is parsing properly, and it's retrieved properly once passed in to the SocketClient class. Honestly, I don't know if this code has <em>ever</em> worked; I have never personally seen it do what it's supposed to, and the functionality that uses all this was created for the benefit of a single client of ours, and has apparently not been functional since before I was hired. </p>
  
  <p>I need to know what to look for to resolve the error. If it helps, the remote computer to which I am trying to establish a connection is on the remote side of a VPN tunnel, and we do have connectivity via other pieces of software we use.</p>
  
  <p>Help?</p>