WinSock: recvfrom() nie czeka

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?

several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około godziny
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:

Kopiuj
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?

satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
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.

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.