I'd pretty much agree with dimm_coder...

Each charqacter, whether NPC or PC, should have a unique ID. Each PC will have they're own socket connection (no way round that) but the NPC server should only use a single socket to pass character events to the game server.

Character events should come in on a socket (doesn't matter which) and be placed on a queue for the game server to process in a seperate thread. The game server should not care whether the character event has been put on that queue by the actions of a real player or the NPC server.

Managing a pool of so many connections as with your original plan, will be too complex and the processing overheads will dramatically increase the chance for the whole system to suffer problems, whether from connections failing or server resources being overloaded.

BTW, You mention about the number of sockets NT can handle... Does this mean you are developing the server to run on NT? This is personal opinion, but if I was developing a game server of this magnitude I would develop it to run under UNIX as I believe it to be far more robust and more efficient in it's resource management than NT.