Основы прокси-сервера. Элементарное.

Тема в разделе "WASM.NETWORKS", создана пользователем nitrotoluol, 23 дек 2006.

  1. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Привет.
    По мере реализации проксика возникли такие вот вопросы

    Иногда, при приеме данных с сервера(сайт)(recv), функция recv как бы
    подвисает. Выход - это вызывать функцию в отдельном потоке и прибивать по таймауту..
    Но! Подвисает она иногда на середине передачи, т.е. когда страница еще не полностью скачанна.

    Тут вопрос первый.
    Что делать?
    Может быть сервер от нас чего-то хочет, послать ему сообщенице какое-то или еще чего?



    Второе. Когда с сервера(сайта) полностью загружена страница и ретранслирована проксиком броузеру, в самом
    браузере прогрессбар по прежнему в активном состояни, как-будто еще что-то скачивается...
    Закрытие сокета ситуации не меняет. Только после закрытия приложения в статусбаре появляется надпись "готово".

    Тут вопрос второй.
    Как сообщить броузеру, что это все. Кина больше не будет (т.е. это был последний пакет. Больше можешь не ждать...)?


    И третий вопрос. Как узнать, что страница полностью загруженна?

    Прием осуществляется пакетами по 500h байт.

    Заранее всем спасибо, кто ответит.
    Что конструктивных ответов...
     
  2. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    А еще
    Вызываю closesocket, a файер показывает, что соединение все еще есть...
     
  3. hamper

    hamper Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2005
    Сообщения:
    37
    Адрес:
    Russia
    Если речь идёт о HTTP, то вроде бы как в RFC2616 об этом говорится.
    Сначала нужно прочитать заголовок ответа сервера по строкам.
    Потом читаем тело ответа, его длина:
    1. В ответ на HEAD или если получен код состояния 1xx, 204, 304 - нет тела.
    2. Transfer-Encoding: chunked - смотри кодирование по кускам.
    3. Content-Length поле заголовка присутствует - оно определяет длину тела.
    4. multipart/byteranges - если длина иным способом не определена - тяжёлый случай.
    5. Сервер может закрыть соединение после того, как передаст тело.
    Поскольку ответ сервера состоит из строки состояния, полей заголовков и тела, то когда будет завершено чтение тела, можно сказать, что "страница" загружена.
     
  4. khv_test

    khv_test New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    135
    2 nitrotoluol: чтоб сразу закрылся надо
    установить параметр у сокета SO_LINGER

    int set_linger(SOCKET &hSock,int val)
    {
    struct linger sLinger;

    sLinger.l_onoff=val;
    sLinger.l_linger=0;
    return (setsockopt(hSock,SOL_SOCKET,SO_LINGER,(const char *)&sLinger,sizeof(sLinger)));
    }
    перез закрытием (close_socket(hSock))вызывай

    set_linger(hSock,1);


    а вот самый отличный фак по сокетам тут все есть...
    http://tangentsoft.net/wskfaq/
     
  5. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    khv_test
    Респектъ ! Все проблемы устранены :)

    По поводу сокс5
    У кого-нить небольшие исходнички может есть на сях или на асме?
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    гыг. они довольно таки большие.
    есть такой.
     
  7. harley

    harley New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2005
    Сообщения:
    11
    Адрес:
    Russia
    есть маленько... правда сокс4.
     
  8. EvilCoder

    EvilCoder New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2006
    Сообщения:
    30
    harley давай выкладывай =)
     
  9. harley

    harley New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2005
    Сообщения:
    11
    Адрес:
    Russia
    Разбирайтесь... Отсутствие багов не гарантирую. Платформа VC++ 6
     
  10. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    FreeManCPM
    выложи проксю.
     
  11. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
  12. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    FreeManCPM , harley респект .
    Давно искал в сети такое .Да и не я один. Думал , вообще , только за деньги можно достать .
     
  13. harley

    harley New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2005
    Сообщения:
    11
    Адрес:
    Russia
    сам над энтой прогой парюсь...
    че-то она иногда рвет коннакт с сообщением CONNRESET