So if you let the thread pool define the mnumber of connections you wouldn't get a hang and would not lose any messages. Am I right?
Not necessarily. What you are doing in that situation is directly coupling the number of internal threads with the number of external connections, leaving the machine vulnerable to overload from external influences.
You need to be able to ensure that the system can be configured to start refusing external connections before it reaches the point at which it starts to load up heavily, allowing you to continue processing and recover gracefully rather than failing catastrophically.
-- Terry