Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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

3 Answers 3

up vote 10 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

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
5  
That's going to spawn loads of subprocesses and crash the system.... –  jackweirdy Aug 2 '12 at 18:42

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

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.