problem z czytaniem socketów - funkcja read

0

witam, mam taki problem... potrzebuje zczytac inta w c przez poloacznie tcp. Int jak wiadomo ma 4 bajty.

if(0>read(request_socket_fd, &port_buffer, sizeof(port_buffer))){
        perror("ERROR reading from socket, port");
}

i problem polega na tym, że raz na kilka razy zczytuje tam zamiast 4 bajtow 1-2 bajty. Z tego co wyczytałem (z reszta podobnie jest w javie) funkcja read nie gwarantuje wczytania tylu bajtow ile przyjmuje 3 argument. I moje pytanie: czy jest inny sposób niż wczytywanie tego w pętli po 1 bajcie ? jest jakaś funkcja albo flaga czy cos dzieki czemu wygodnie wczytam caly bufor?

0

A dlaczego po jednym bajcie? Czytasz tyle, ile możesz, a jeśli read nie przeczytała wymaganej liczby bajtów, odczytujesz pozostałość w następnych wywołaniach funkcji.

0

recv - czeka dopoki nie odczyta podanej liczby bajtow, a i flag jej do tego nie musisz ustawiac, zostaw na 0, przyjmuje te same 3 parametry i flagi jako 4.

0

@t0m_k: nie wiem skąd te informacje. recv przeczyta tyle, ile jest w danej chwili w buforze socketa. Ustawienie flagi MSG_WAITALL powinno rozwiązać problem (choć i tu nie ma pewności, że zawsze będzie poprawnie obsługiwana).

1 użytkowników online, w tym zalogowanych: 0, gości: 1