Глюк - не глюк, дырка - не дырка, глупость иль еще что-то... но у меня случайно получился очччень странный клиент, который ложит все ОПЕНСОРС примеры, (которые мне удалось найти) серверов с WSAAsyncSelect, а те которые не ложатся, у них заканчиваются хэндлы . Мож, я что-то не понимаю, иль авторы не дописали проверок, но получается такая вот ботва: 1. FD_ACCEPT тут все ОК. 2. FD_READ {данные есть, их много, и нет разницы считать их н-байт; или в цикле пока не WSAEWOULDBLOCK} 3. FD_CLOSE {recv c msgpeek выдает, что данные есть, wsarecv - аналогично, ioctlsocket - аналогично (даже если их нет в системном буфере на самом деле), WSAGETSELECTERROR - ошибок нет} 4. FD_READ {[данные есть, считываются],[данных нет]} - самое интересное начинается здесь, ведь многие "примеры", данные о сокете и связанные структуры освободили ))), при том я думаю, что люди их писали грамотные. 5. FD_READ {данных нет} 6. FD_READ {данных нет} 7. FD_READ {данных нет} 8. FD_READ {данных нет} 9.... А, клиент нормально завершился еще на 2 пункте Что происходит при подключении на 10 пункте нового моего клиента, и говорить не буду, а то со смеху сдохнуть можно... Короче бился над сабжем неделю, правильного решения для сервера так и не нашел, пришлось править клиента ЗЫ: без разницы вызывать closesocket в пункте 3 или нет, FD_READ всё равно будет идти а ещё может прити парочку FD_CLOSE, а дальше генератор случайных глюков (Например DispatchMessage никуда не приводит. ЗЗЫ: для блокирующих сокетов и просто select(), все в порядке... ЗЗЗЫ: а еще иногда recv(.,[<var>,<0>],0,мсж_пиик) выдает эксепшн ЗЗЗЗЫ: клиент передает данные (файл) и завершается.