Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SocketException: address incompatible with requested protocol

Tags:

c#

.net

sockets

I was trying to run a .Net socket server code on Win7-64bit machine .
I keep getting the following error:

System.Net.Sockets.SocketException: An address incompatible with the requested protocol was used.
Error Code: 10047

The code snippet is :

IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
IPEndPoint ip = new IPEndPoint(ipAddress, 9989);
Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
try
{
    serverSocket.Bind(ip);
    serverSocket.Listen(10);
    serverSocket.BeginAccept(new AsyncCallback(AcceptConn), serverSocket);           
}
catch (SocketException excep)
{
  Log("Native code:"+excep.NativeErrorCode);
 // throw;
}    

The above code works fine in Win-XP sp3 .

I have checked Error code details on MSDN but it doesn't make much sense to me.

Anyone has encountered similar problems? Any help?

like image 618
Amitd Avatar asked Mar 03 '10 10:03

Amitd


2 Answers

On Windows Vista (and Windows 7), Dns.GetHostEntry also returns IPv6 addresses. In your case, the IPv6 address (::1) is first in the list.

You cannot connect to an IPv6 (InterNetworkV6) address with an IPv4 (InterNetwork) socket.

Change your code to create the socket to use the address family of the specified IP address:

Socket serverSocket =
    new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                        ↑

Note: There's a shortcut to obtain the IP address of localhost: You can simply use IPAddress.Loopback (127.0.0.1) or IPAddress.IPv6Loopback (::1).

like image 64
dtb Avatar answered Oct 18 '22 14:10

dtb


Edit C:\Windows\System32\drivers\etc\hosts and add the line "127.0.0.1 localhost" (if its not there, excluding quotes)

like image 2
ata Avatar answered Oct 18 '22 13:10

ata