Witam,
mam kolejny problem z boost asio ;/ . Ale teraz z async_read_until . Chodzi o to , że gdy dostane dane od clienta to zawsze wywala mi errora "Połączenie przerwane przez system lokalny ". Nie wiem dlaczego .
Mimo tego , że w bufferze są dane to zawsze bytes_transferred ma wartość 0 ...
Jak możesz to wrzuć całą klasę sesji.
Tutaj kod :
;/
Masz sporo błędów w kodzie ale główna przyczyna, dla której dostajesz error code 1236 to to, że wołasz async_read_until
bez zainicjowania end bajtu. Przez co później dostajesz timeout na timerze i woła się callback, który zamyka połączenie. Wtedy też woła się async_read_until
z error codem 1236.
Poza tym masz UB w konstruktorze klasy TSession
inicjujesz timer io_service
pobranym z sock_ptr
, który jeszcze nie został zainicjowany. Przypominam, że kolejność inicjalizacji na liście inicjalizacyjnej konstruktora zależy od kolejności deklaracji pól w klasie. W tym przypadku zadeklarowałeś sock_ptr
przed timerem. Dalej... w kodzie masz pełno literówek/czasami brakuje &/const itd.
W klasie brakuje const i & dlatego , że wtedy pisałem to z pamięci XD .
To jest poprawna klasa :
Chodzi o to , że przy odbieraniu pakietu EndByte ma w sobie jakąś wartość.
satirev napisał(a):
Masz sporo błędów w kodzie ale główna przyczyna, dla której dostajesz error code 1236 to to, że wołasz
async_read_until
bez zainicjowania end bajtu
Dobra koleś powiedział mi jaką wartością zainicjalizować EndByte . 0x0E . Ale po dostarczeniu 3 pakietu czyli hasła po aktualizacji już EndByte'u i Session Keya dostaje kolejny error... "Dostarczone dojście do pliku jest nieprawidłowe".
Naprawione.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.