jam231 / sia

Stock market server (part of stock market simulation system).
1 stars 0 forks source link

Brak sprawdzenia czy mamyw sokecie wystarczającą ilość bajtó, żeby odczytać całą wiadomość. #7

Closed marimarek closed 11 years ago

marimarek commented 11 years ago

Usuneliście funkcję IMessage::isEnoughData sprawdzającą czy mamy dość bajtów, aby odczytać daną wiadomość. Wiem, że teraz jest to sprawdzane w konstruktorach wiadomości, ale problem polega na tym, że TCP nie gwarantuje tego, że nie pofragmentuje wiadomośći i nie wyśle jej w kawałkach(choć przy tak małych wiadomościach jst to mało prawdopodobne). Gwarantuje tylko tyle, że wiadomości dojdą w tej samej kolejności i że wogle zawsze dojdą. Teraz jeśli jakaś wiadomość zostanie podzielona na pół to później już do końca wszystko będzie się pierdzielić, bo będziemy zaczynali za każdym razem czytać w połowie wiadomości myśląc, że to jej początek. Ja to robiłem wcześniej tak, że sprawdzałem czy mamy wystarczająco danych, żeby przeczytać całą wiadomość bez usuwania niczego z bufora(socketa), a jak nie było wystarczająco danych to po prostu wychodizłem z funkcji czekając, aż przyjdzie wystarczająca ilość,

jam231 commented 11 years ago

Ok, to popraw to. Chyba oprócz readData() nic nie trzeba będzie zmieniać - w konstruktorach wiadomości jest sprawdzane, czy jest odpowiednia liczba bajtów w gnieździe dla POSZCZEGÓLNYCH SKŁADOWYCH wiadomości, więc to zostaw.

jam231 commented 11 years ago

Dodałem odpowiedniego patcha.