TcpListener: How to listen on specific port on all interfaces?

Ian Boyd picture Ian Boyd · Aug 30, 2011 · Viewed 12.6k times · Source

There are three overloads for constructing a TcpListener:

i want to listen on a particular port, but on all available interfaces. There was an overload available to do that, but it's been marked as obsolete.

What is the new preferred/non-obsolete way to listen on a particular port on all interfaces with a TcpListener in .NET?


For helpfulness sake, an IPEndPoint is:

public IPEndPoint(
    IPAddress address,
    int port
)

which is what the 3rd overload is. And an IPAddress takes, as its constructor:

  • a byte[]
  • an Int64
  • a byte[] and an Int64

Answer

Yahia picture Yahia · Aug 30, 2011

Just bind to the IPAddress.Any - that's how this is usually done... not sure but it could be that you need to bind to IPAddress.IPv6Any too.

This SO post suggests that you bind to every IP addresse explicitly - and this SO post has code on how to get all IP adresses...


From MSDN:

If you do not care which local address is assigned, specify IPAddress.Any for the localaddr parameter, and the underlying service provider will assign the most appropriate network address.


From MSDN:

IPAddress.Any Field

Provides an IP address indicating that the server should listen for client activity on all network interfaces.