Winsock: sendto() sendet auf einmal keine Daten mehr, meldet aber OK
25. Nov 2015, 08:34
Hallo,
Ich habe ein seltsames Problem mit der sendto-Funktion (winsock). Ich habe eine Anwendung mit einem UDP-Socket. Die Kommunikation funktioniert an sich ganz gut, es gibt keine Auffälligkeiten. Im folgenden Fall habe ich aber Probleme und weiß nicht ganz genau, woran es liegt bzw. wie ich weiterkomme.
Die UDP-Kommunikation läuft mit einem externen Gerät. Ich mache einen Firmware-Download bei diesem Gerät:
1. Firmware-Datei übertragen
2. Gerät flasht die Firmware und kommuniziert während des Flashvrogangs (ca. 30 s) nicht.
Nach der Übertragung der Datei öffne ich den Socket neu (einmalige Aktion) und verschicke zyklisch (1s-Raster) einen Befehl, um zu prüfen, ob das Gerät sich wieder meldet. Und hier tritt das Problem auf: Ich sehe in Wireshark, dass mein UDP-Paket x-Mal verschickt wird und danach auf einmal nicht mehr, obwohl mein Programm den Befehl weiterhin zu verschicken versucht. Wenn ich in diesem Zustand das Programm bei der sendto-Funktion anhalte (Breakpoint), sehe ich, dass die sendto-Funktion mit OK zurückkehrt und die korrekte Anzahl gesendeter Bytes zurückliefert. Nur dieses UDP-Paket sehe ich in Wireshark nicht. Es sieht so aus, als ob der PC das UDP-Paket gar nicht verschickt bzw. verschluckt, ich bekomme aber keinen Fehlercode. In der Regel ist es so, dass nach einer Zeitlang und Neuöffnen des Sockets die UDP-Kommunikation wieder einwandfrei funktioniert.
Wie kann es sein, dass die sendto-Funktion zwar ok zurückgibt, aber das Paket nicht verschickt? Ich wäre für jeden Tipp dankbar.
|