Witam
Tworze aplikacje, ktorej serce to petla w stylu:

while( recv(...) != SOCKET_ERROR )
analizuj_przychodzace dane ...

w sordku petli nastepuje analiza pobranych pakietow. Nigdzie w programie nie ma zadnych closesocket a analiza pobranych danych opiera sie na pobraniu naglowka bloku, zanalizowaniu go i przesuniecia wskaznika o ilosc miejsca zajmowanego przez blok i tak do czasu az przesuniecie osiagnie wielkosc pakietu umieszczona w jego pierwszych 2 bajtach.

Wczesniej, kiedy moj program analizowal tylko pierwszy blok wszytko bylo ok. Jednak po wprowadzeniu przeze mnie analizowania kazdego bloku po jakims czasie funkcja recv zwraca 0 co oznacza iz polaczenie zostalo zamkniete i konsekwencja czego program przestaje pobierac dane mimo iz petla powinna zostac przerwana dopiero jezeli wystapi blad gniazda. Dzieje sie to w roznych odstepach czasowych. Probowalem nawet sniffowac wymiane miedzy moim klientem i serwerem i okazuje sie ze przerwa w transmisji nastepuje podczas przeslania losowego i poprawnego pakietu oraz nie zostaje wyslana flaga FIN.

Czy ma ktos pomysl jak to rozwiazac?