Nowe posty

Autor Wątek: Connection: keep-alive implementacja  (Przeczytany 4018 razy)

  • Gość
Connection: keep-alive implementacja
« dnia: 2010-02-12, 14:22:10 »
Pytanie mam następujące. Jak chcę aby program sieciowy pobierający strony za pomocą http obsługiwał connection: keep-alive to jak powinienem to zaimplementować. Przecież jak mam odbiór w pętli

do {

wynik = recv (gniazdo, bufor, sizeof(bufor), 0);

} while (wynik>0);

to gdy serwer skończy nadawanie danych ale nie rozłączy się (to gniazdo blokujące zamrozi recv i będzie czekać na dane które nie nadejdą (i zostanie rozłączony). Pytanie jest jak to zrobić?

Jeśli nawet zastosuję flagę nieblokującą to jak wykryć  że serwer skończył nadawać dane, przecież nie zawsze wysyła serwer Content-length?

jk33

  • Gość
Connection: keep-alive implementacja
« Odpowiedź #1 dnia: 2010-02-12, 17:11:35 »
Gdybym nie czytał Twojego poprzedniego wątku, to nie zgadłbym o co chodzi. Postaraj się poprawić ten post, zanim ktoś go usunie.

1) Skoro przeglądarka potrafi odebrać takie dane, to zapewne skądś wie ile ich jest lub kiedy się kończą. Na pewno napisali o tym w specyfikacji protokołu HTTP

Proponuję skorzystać z jakiegoś sniffera, żeby sobaczyć  co dokładnie jest przesyłane.

2) Niezależnie od tego możesz spróbować zamknąć koniec gniazda do pisania. Może to przekona serwer, żeby się rozłączył (man 2 shutdown)

  • Gość
Connection: keep-alive implementacja
« Odpowiedź #2 dnia: 2010-02-12, 18:16:42 »
Dzięki, dowiedziałem się wielu ciekawych rzeczy. Jeżeli nie jest używane Content-length, odpowiedzi bez treści to najczęściej stosowane jest Transfer-encoding: chunked

W którym jest
LIlość danych (hex)
Dane
0 (dla końca)