WinSock: recvfrom() nie czeka

0

Witam,
muszę przy użyciu WinSocka stworzyć mały program odbierający komunikat wysyłany przez protokół UDP. Problem pojawia się przy odbieraniu informacji, w pierwszej wiadomości muszę przesłać długość komunikatu, który znajdzie się w drugiej wiadomości. O ile pierwsze wywołanie funkcji recvfrom() działa tak jak powinno tj. czeka na komunikat i poprawnie go odbiera, o tyle już drugie wywołanie nie czeka na następną wiadomość tylko od razu zwraca wartość -1. Dlaczego tak się dzieje?

0

Po otrzymaniu -1 wywołaj WSAGetLastError żeby podejrzeć treść błędu.

0

Pojawia się błąd nr 10014. Zauważyłem że spowodowany jest on wypełnieniem dwóch ostatnich parametrów funkcji recvfrom(), tj. wskaźnika na strukturę sockaddr_in i jej długości. Robię dokładnie tak jak w przykładowych funkcjach. Może pokażę ten fragment:

recvfrom(gniazdko,&tekst,dlugosc,0,(struct sockaddr *)&info,sizeof(struct sockaddr_in)) 

Bez tych dwóch ostatnich parametrów wszystko chodzi, ale potrzebuję ich do odczytania informacji o nadawcy, co jest źle?

0

Czytaj dokumentację: "The system detected an invalid pointer address in attempting to use a pointer argument of a call. This error occurs if an application passes an invalid pointer value, or if the length of the buffer is too small. For instance, if the length of an argument, which is a sockaddr structure, is smaller than the sizeof(sockaddr)."

0

Czytałem. Nie pomaga podstawianie zarówno struktury sockaddr ani sockaddr_in i odpowiednich dla nich długości. Przykład, który podałem wyżej jest żywcem skopiowany z działającego programu, jednak u mnie wywala ten błąd.

0

Już wiem, rozmiar struktury sockaddr_in musi być przekazywany jako wskaźnik.

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