Error: 10014

Wszystko fajnie i nawet powinno działać. Problem w tym że powinno można tu zastosować zamiennie z prawie a jak jest z tym drugim – wszyscy wiemy.

Co tym razem? Error 10014. WTF? Otóż to… Tutaj jest treść errora 10014:

WSAEFAULT: The system detected an invalid pointer address in attempting to use a pointer argument in a call.

Czyli że niby podaje zły adres… Ale gdzie?! Wywołanie recvfrom() wygląda na dobre i argumenty wszystkie są podefiniowane tak jak manual przykazał. Więc co jest źle? Tego być może nie dowiemy się w następnym odcinku…

EDIT: Rozwiązanie

Zaraz po napisaniu tego posta stwierdziłem, że jeszcze pogrzebie i odkryłem, że jednak nie można wyrzucić ostatniego argumentu z recvfrom() co wcześniej uczyniłem bo przecież wiem jaki rozmiar ma sockaddr_in. Poprzednio wstawiłem nam sobie NULL bo uważałem, że nie będę potrzebować tego argumentu… błąd… Ja go nie potrzebowałem, ale funkcja do działania owszem. Jako ostatni argument trzeba wstawić adres do zmiennej zawierającej sizeof(sockaddr_in) i wtedy wszystko działa.

Tym oto sposobem sprawiłem, że AGE potrafi już komunikować się ze światem poprzez UDP!

@Tarains: Napisałem już część ageNet, zadowolony? 😛

Problemy z UDP

O ile komunikację sieciową za pomocą TCP potrafię zakodzić bezbłędnie o tyle ni cholery nie mogę poradzić sobie z UDP. Co prawda wiadomości są odbierane – mam tylko problem z ich odczytaniem…

Być może mój błąd wynika właśnie z tego, że niezbyt się zajmowałem protokołem UDP… Tak czy inaczej dzieje się tak:

  1. Włączam program i chodzi on normalnie (sprawdza czy nie ma wiadomości i jak nie to idzie dalej)
  2. Wysyłam do programu kilka bajtów przez UDP
  3. Program odczytuje bezbłędnie i tutaj pojawia się dopiero problem. Od tego miejsca program staje i oczekuje na kolejne wiadomości. To zatrzymuje pętlę i oczywiście program nie reaguje zupełnie na nic…

Może ktoś ma jakiś pomysł co tutaj pomoże? Ja staram się coś na to poradzić, ale średnio mi idzie 😉