Ok, pewnie masz rację z poprawnością. Ale o ile dobrze zrozumiałem, a nie chce mi się teraz szukać, to write przepisze i tak recvMsgSize danych z Buffer (czyli w skrajnym przypadku cały bufor) i nie kończy tego dodatkowym zerem. Infern zaś twierdzi, że odebrane dane nie kończą się '\0', sam zaś oczekuje tego znaku na końcu, stąd w tej skrajnej sytuacji tego znaku na końcu nie będzie miał także w buforze. Poprawnie było by odczytując bufor spodziewać się max sizeof(Buffer) danych, lecz nie więcej niż do znaku '\0'.
Pytanie do Inferna, co się stanie w przypadku gdy recv odbierze dokładnie sizeof(Buffer) danych tak jak mu to zlecasz, gdzie spodziewasz się '\0' (nawet, jeśli wcześniej "wyczyściłeś" cały bufor)??
Edit: Ech... zapętliłem się z tym pierwszym akapitem. Oczywiście chodzi tylko o wyświetlenie, czy ogólniej strumień. Masz rację, wówczas przecież ten znak zera nie jest do niczego potrzebny
sockety problem
Moderatorzy: Moderatorzy, Administratorzy
Re: sockety problem
Ostatnio zmieniony 2009-10-17, 15:21 przez Pajaczek, łącznie zmieniany 1 raz.
Re: sockety problem
Wyświetli cały bufor a co za tym idzie nie będzie dziwnych danych, które istnieją gdy najpierw odbiorę 10 znaków a później 5Pajaczek pisze:Pytanie do Inferna, co się stanie w przypadku gdy recv odbierze dokładnie sizeof(Buffer) danych tak jak mu to zlecasz, gdzie spodziewasz się '\0' (nawet, jeśli wcześniej "wyczyściłeś" cały bufor)??
Pozdrawiam Tomek
Re: sockety problem
Czyli odebrane dane wówczas kończą się znakiem \0? Bo jeśli nie, to wyświetli cały bufor... i wiele więcej... aż nie trafi w pamięci na \0. Przecież recv zastąpi całą tablicę Buffer, łącznie z ostatnim wpisanym tam przez Ciebie znakiem \0.