If the listening port cannot be setup (eg. can't bind because already in use by another mongos, nofile ulimits exceeded, etc), mongos will exit. However, a lot of other state has been setup prior to this, including loading the config db from the config server. In the case where bind() is going to fail, this just adds needless load to the config/shard servers. It would be better if the listening port could first be created and bound to, then the config db loaded and other setup performed, before finally calling accept() on the listening port.