Thread reagiert nicht immer bei eingehenden Nachrichten
-
Guten Morgen an alle,
ich habe folgendes Problem.
Ich habe einen Thread welcher via recvfrom in einer endlosschleife prüft ob neue Nachrichten reinkommen.timeval tVal; tVal.m_sec = 0; tVal.m_usec = 1000; static void MyThread() { while(bRun) { rv = select(0, &fdSet, NULL, NULL, &tVal); if(rv) { rv = recvfrom(mysocket, buf, sizeof(buf), 0, (sockaddr*)&myfromaddrstruct, &nSaLen); if(rv != SOCKET_ERROR) { buf[rv] = '\0'; } } } }Nun ist es so das wenn eine Nachricht über den UDP reinkommt bekommt er das auch mit und arbeitet weiter alles ab. Nur sporadisch kommt es vor das nach 5 oder 6 malen nichts mehr passiert. Via Wireshark sehe ich das einen Nachricht eingeht aber der Thread wird bei select geblockt. Warum er dort geblockt wird obwohl ich ja den timeval mit 1000υs angebe.
Woran kann das noch liegen???
-
UDP ist unzuverlässig... es kann durchaus vorkommen, dass etwas verlorgen geht... oder das jemand anders es Dir "wegliest"...
-
Aber es klappt gar nicht mehr nachdem dies das erste Mal passiert.
Was ich noch vergessen habe zu erwähnen ist, dass ich diesen Fehler im Debug Mode nicht nachvollziehen kann. Da funktioniert es genauso wie gewünscht.
Nur im Release Mode tritt der Fehler auf.
-
Dann debug halt den Release-Mode...
-
Das ist ja das warum ich das nicht mehr nachvollziehen kann woran es liegen könnte. Auch Debuggen im Release Mode ruft den Fehler nicht hervor.

-
Was auch seltsam ist, das passiert nur wenn man einige Minuten wartet bevor man den nächsten Aufruf startet, mach ich das innerhalb von z.B. einer Minute dann klappt es...
Und wenn ich das Select mal rausnehme und dafür mit ioctlsocket ein NonBlocking Socket daraus mache, kehrt er sobald auf dem Socket eine Nachricht eingeht nicht mehr aus recvfrom zurück, trotzdem dieser auf NonBlocking steht.
-
Verdammt, was ich vllt. auch noch erwähnen sollte als wichtigen unterschied.
Wenn die Applikation debuggt gestartet wird dann als Applikation und in dem Zustand wo es nicht funktioniert ist das ganze ein Windows - Dienst.
-
---gelöscht----
-
wow, 4-fach Post...

Probier mal, die Einstellung im Release ähnlicher zu denen im Debug zu machen.
-
Erst mal sorry für den 4 fach Post

Also es hat nicht unbedingt was mit den Einstellungen zu tun.
Die App kann man auch als Konsolenapplikation laufen lassen.
Funktioniert auch wunderbar.Erst sobald im Dienstmodus läuft tritt dieser Fehler auf.
Kann es am SYSTEM User liegen mit dem der Dienst gestartet wird?
Sind Events zu langsam im Dienstmodus???Hier fehlt mir auch leider ein bisserl die Erfahrung.
-
nur mal so als einwurf. der fehler liegt nicht an wind00f, er liegt an deinem programm.
-
wieso mach du kein WSAAsyncSelect() und behandelst dass event? :xmas1: