Господа!
Есть вопросы по WinSock.
1) Какой тип реализации сервера предпочтителен при большом (тысячи – десятки тысяч) и при малом (десятки) предполагаемом количестве клиентских подключений? (Варианты: multi-thread blocking synchronous или single-thread non-blocking asynchronous)? Т.е. как сделать, чтобы сервер не заглючил при большом кол-ве клиентов и как не сделать слишком навороченный сервер если клиентов раз два и обчелся?
2) Какой тип реализации клиента (blocking synchronous, non-blocking asynchronous) самый практичный с точки зрения производительности и простоты реализации?
Как в клиенте, так и в сервере я склоняюсь к асинхронному single-thread non-blocking (т.е. путем указания окна с помощью WSAAsyncSelect), как наиболее простому, универсальному и функциональному, насколько это обосновано?
3) В связи с этим вопрос по использованию WSAAsyncSelect: Не порекомендуете ли уже отработанную схему обработки сообщений FD_CONNECT, FD_ACCEPT, FD_READ, FD_WRITE, FD_CLOSE в клиенте и сервере (если у обоих asynchronous single-thread non-blocking, протокол TCP), в правильной последовательности, с правильными функциями и обработкой ошибок? Я не уверен, что до конца правильно понял то, что описано в MSDN, а проверить все возможные ситуации нет возможности (например, пакеты данных маленькие, но нельзя рассчитывать, что они будут обязательно приняты за один recv(), в этом случае нужно пододать следующего FD_READ, и т.д. и т.п.). К тому же я слышал, что у какой-то версии винды без сервис-пака есть баг с FD_WRITE. В общем, все это меня малость пугает

.
Спасибо.