![]() |
Socks-сервер WinSock
Т.к. в моей пред.теме о socks никто ничем помочь не смог, создаю еще одну.
Проблема заключается в некорректности работы сокс-сервера через соксификаторы. Для наглядности, чтоб было максимально понятно написал простейший socks4 сервер с подробнейшими комментариями (Delphi, WinSock + WinApi). Качаем соксификатор, настраиваем в нем socks4 (Сервер: 127.0.0.1, порт: 8080). Качаем исходник socks4-сервера (залил для большей наглядности) Компилируем, запускаем, заходим на mail.ru - страница грузится очень долго (конца загрузки дождаться мне так и не удалось), хотя тот же гугл, да и вконтакт (по крайней мере на "Поиске людей") работают норм. Так вот, нужна подсказка, из-за чего это происходит и как это исправить. Код: Код:
program Socks4;Тому, кто поможет, скромное вознаграждение размером в 20$. Очень надеюсь на вас, а то я уже сломал мозг. |
Неужели на ачате совсем не осталось знающих людей? Может тогда посоветуете подходящий форум?
|
попробуй на васме спросить. здесь мало кто таким программингом занимается. В основм хттпвебреквест, на делфе сделать проверку 20 радиобатонов через ифы, итп.
|
Faost, как вариант можно разбить обработчик сессии на 2 потока, в одном передавать данные от браузера к таргету, в другом от таргета к браузеру
|
Ra$cal, спасибо, попробую. Только не побьют ли меня там за делфийский код...)
А то билдер долго качать и устанавливать, чтоб проверить, так ли переписал на C. fluffylion, я и так пробовал, проблема аналогичная. |
не побьют, но помогать будут медленнее =) накидай алгоритм словесный примерный лучше. я вот тоже даже не пытался смотретоь на код, ибо делфи.
|
компилить и отлаживать код не пытался, так что просто опишу что я заметил, просматривая это:
- когда принимаешь заголовок socks не проверяешь количество принятых байт - неправльная работа с select. Проблемы с mail.ru полагаю из-за этого. Ты не проверяешь возможность того что селект возвратил управление по таймауту. Ты не обновляешь набор сокетов перед использованием селекта. Короче, читай маны... - зачем-то использованы одновременно потоки и select - VirtualAlloc для выделения буфера памяти каждый раз при приеме данных очень круто и оптимально... вообще выделяемая этой функцией память округляется до страницы(64 кб). Почему бы не использовать буфер в стеке? - когда таргет закрывает соединение, надо сначала отправить все данные в его буфере клиенту, а потом уже корректно завершить соединение с помощью shutdown а не обрывать его. стиль: - зачем goto? тут можно было бы и без него - нет отступов адекватных дополнительные советы: если будут еще проблемы, попробуй использовать сниффер для отладки... PS за такой код на васме точно побьют ;) |
дажа разбиратсья влом, глядя на этот код.
Оформление нулевое и ужасный код. |
Цитата:
Цитата:
Цитата:
FD_SET(BSock, fset); FD_SET(TargetSock, fset); Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
P.S. Цитата:
|
| Время: 16:01 |