Sorry, Graemef, but appforce is correct.
There is typically *one* listener socket in *one* server process. It calls "listen()", then it blocks in "accept()". When "accept()" unblocks, a new connection has been established (the 3-way handshake has occurred), a new socket is returned, and the server process will often create a new process or thread to service the new connection (returning back to "accept()" the next connection to arrive on the original listener socket).
The best book on the subject is:
Unix Network Programming, Stevens
http://www.bookpool.com/sm/0131411551
IMHO .. PSM
PS:
Appforce -
In my 2.6 source tree, this is one good kernel module to look at:
/usr/src/linux-2.6.8-24.14/net/socket.c