Und der aber als extra Thread, weil sonst nicht mehr empfangen wird, solange der zum Beispiel in den Datenbanken herumschreibt/liest?
Oder ist das egal, weil es ein Stream-Socket ist und ich nacher alles auslesen kann was dazwischen angekommen ist?
Das Auslesen kannst du eine gewisse Zeit unterbrechen, bis der Empfangspuffer voll ist oder ein Timeout erreicht wird. Du willst aber währenddessen üblicherweise auch noch weiter Verbindungen annehmen.
Eine Möglichkeit wäre für alles Threads zu erzeugen. Also ein Thread der Verbindungen annimmt und dann jede Verbindung einem eigenen Thread (aus einem Threadpool, da neu erzeugen meist aufwändig ist) übergibt. Da musst du natürlich alle Stellen wo Daten zwischen den Threads übertragen werden absichern.
Alternativ lässt sich das auch asynchron lösen. Bedingung dafür ist, dass keine blockierende Aktionen durchgeführt werden, die länger brauchen. Dann kannst du einfach durch ankommende und aktive Verbindungen iterieren und diejenigen verarbeiten die es gerade nötig haben. Man spart sich dabei die Synchronisierung der Threads. Wird gerne im Web Bereich verwendet um sehr viele Verbindungen zu verarbeiten. Für einen einfachen Loginserver wäre das vielleicht auch eine Option.