Running TCPListener from a Windows Service

0

I am trying to create a Windows service which listens on a particular port for an incoming serialized object and then performs some action, however every time I start I get the following error:

System.Net.Sockets.SocketException (0x80004005): Only one usage of each socket address (protocol/network address/port) is normally permitted

Here is the code that's running:

 protected override void OnStart(string[] args)
        {
                Thread t = new Thread(Server.StartServer);
                t.Start();
        }

The StartServer method looks like this:

public static void StartServer()
    {
        TcpListener server = null;
        try
        {
            server = new TcpListener(IPAddress.Loopback, 8889);
            server.Start();
        }
        catch(Exception e)
        {
            //write to a log file and close
        }

        for (; ; )
        //Some more code that handles the serialization etc

The message seems to state that something else is already listening on that socket however when I take a look using CMD and netstat -a I see nothing on that port, and it seems to occur regardless of what I change the listening port to. The exception occurs on the line "server = new TcpListener(IPAddress.Loopback, 8889);".

Why does this error occur and how am I able to make this work properly?

*Edited to note that I have also tried this as a console app and it seems to work, it only fails when running as a Windows Service

c#
windows
sockets
service
tcplistener
asked on Stack Overflow Nov 12, 2018 by Tom Halverson

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0