компилить и отлаживать код не пытался, так что просто опишу что я заметил, просматривая это:
- когда принимаешь заголовок socks не проверяешь количество принятых байт
- неправльная работа с select. Проблемы с mail.ru полагаю из-за этого. Ты не проверяешь возможность того что селект возвратил управление по таймауту. Ты не обновляешь набор сокетов перед использованием селекта. Короче, читай маны...
- зачем-то использованы одновременно потоки и select
- VirtualAlloc для выделения буфера памяти каждый раз при приеме данных очень круто и оптимально... вообще выделяемая этой функцией память округляется до страницы(64 кб). Почему бы не использовать буфер в стеке?
- когда таргет закрывает соединение, надо сначала отправить все данные в его буфере клиенту, а потом уже корректно завершить соединение с помощью shutdown а не обрывать его.
стиль:
- зачем goto? тут можно было бы и без него
- нет отступов адекватных
дополнительные советы:
если будут еще проблемы, попробуй использовать сниффер для отладки...
PS за такой код на васме точно побьют
