Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I use netcat to run a simple server like this:

while true; do nc -l -p 2468 -e ./my_exe; done

This way, anyone is able to connect to my host on port 2468 and talk with "my_exe".
Unfortunately, if someone else wants to connect during an open session, it would get a "Connection refused" error, because netcat is no longer in listening until the next "while" loop.

Is there a way to make netcat behave like a multi-threaded server, i.e. always in listening for incoming connections? If not, are there some workarounds for this?

share|improve this question
up vote 11 down vote accepted

you are using the wrong tool for the task: use something like ucspi-tcp, especially tcpserver:

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.
share|improve this answer
It works a treat, thanks! – etuardu Jan 13 '11 at 18:44

Although you didn't mention the operating system you're using, I'll assume it's Linux or Unix based on the syntax of your shell command example.

If your system is running xinetd (or its predecessor inetd), you can use that software to listen for a connection on the port of your choice, and run an executable to respond. With xinetd/inetd, you have the option of allowing multiple concurrent connections, each served by a separate instance of your executable.

share|improve this answer

you could likely just background the process (then it doesn't wait for a return before stepping to the next loop) with an '&' such as:

while true; do nc -l -p 2468 -e ./my_exe &; done
share|improve this answer
That's going to spawn loads of subprocesses and crash the system.... – jackweirdy Aug 2 '12 at 18:42
And, only the first invocation will work; every succeeding one will fail because there's already a server socket on port 2468. – Daniel Griscom Mar 27 at 22:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .