![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
Pete |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
Правильно ли я понимаю, как она работает?
Здесь c_sock и extsd -- 2 сокета (TCP). Я их отслеживаю на предмет появления новых символов. Если в какой-то сокет что-то приходит, перенаправляю это в другой и наоборот (см. resend()). Если какой-то сокет закрыт, то, насколько я понял, select() вывалится и это событие отловится изменением соответствующего дескриптора в 3-ем наборе (efds). В maxfd хранится максимальный из файловых дескрипторов из набора (наборы одинаковы: c_sock и extsd).
Это код, в правильности которого я сомневаюсь:
А вот и resend():
-------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
И в чем проблема?
На первый взгляд должно работать. Я использовал select. Ничего непредсказуемого не заметил. |
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
Должно-то оно должно, только не работает. Проблема в том, что когда клиент пишет что-то в сокет (send'ом), сервак должен это прочитать и ответить (recv'ом). Фактически, вышеизложенный код --- часть проги-посредника между клиентом и сервером (реализую SOCKS).
Клиент передет нормально, сервак принимает нормально, но когда последний хочет ответить, то посредник виснет на select'е. Потом мне объяснили, что если указать сокет в 3-ем наборе дескрипторов, то при его закрытии select вываливается, а FD_ISSET от него становится истинным. Это тоже у меня не получилось подтвердить. В общем, где-то скрыто глобальное непонимание, что очень мешает заставить прогу работать... -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
select вроде вываливается не по ошибке если данных нет, а по чтению EOF. Т.е. read должен ноль выдавать, а у вас resend такое не обрабатывает...
Добавлено @ 06:03
![]() |
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
Проблемы с read я уже решил. Меня больше интересует вопрос, почему сервак в ответ клиенту на своем конце что-то пихает, а socks-сервер ждет как ни в чем не бывало...
Добавлено @ 21:10 ...вместо того, чтобы переслать это клиенту. -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
А ты уверен, что socks ждет именно данные от сервера?
|
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
Как мне объяснили, он ждет данные и от сервера, и от клиента.
Что только я не пробовал, никакого продвижения. Посылаю в сервере сообщение клиенту, а socks-сервак встает на select. Даже не знаю, что делать. -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
Все, разобрался. Дело было в том, что я не востанавливал fd_set'ы после каждого выхода из select().
![]() Говорил же: банальная ошибка, а сколько времени ушло на ее поиск! ![]() Можно закрывать) ![]() -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
В следующий раз сразу строчку говорите, где собственно банальная ошибка ![]() ![]() ![]() ![]() |
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
Дело не в строчке, а в понимании (точнее, непонимании) работы функции.
Если кому интересно, надо было добавить во втором блоке кода, сразу перед выходом из if (строка 22), это:
Добавлено @ 00:32 Спасибо за помощь! -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
Einstein |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 16.7.2006 Репутация: нет Всего: нет |
Добрый день, подскажите хто сможет, я приехал с Канады и мне нужен совет по поводу компании где можно устроится в Киеве. Я программист С++. Заранее благодарен
|
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
А ты приколист. ![]() ![]() ![]() А что в Киев ? Дуй в Сибирь. Медведей правда не обещаю ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |