the reason why the server disconnects might be found in the 'Listen' parameter in the call to IO::Socket::INET->new. 'Listen' is somewhat mis-named, as it means the backlog argument in a call to the C-function listen(), see
man 2 listen. you may get along with increasing the value to the highest possible one - which in fact depends on the system. in /usr/include/bits/socket.h (as on a debian box for instance) the constant SO_MAXCONN is defined. set the 'Listen' argument to the value defined there, and you will at least minimize the risk of "prematurely" rejected connections.
--------------------------------
masses are the opiate for religion.