Ich habe eine Client-Anwendung, die mit einem QEMU-Prozess über einen QMP Unix-Domain-Socket kommuniziert. Manchmal, nachdem der Client clos() für die Socket-Verbindung aufgerufen hat, zeigt 'netstat -ap unix' immer noch den Status CONNECTED an. Ich überprüfe den Rückgabewert des Aufrufs close() und es wird erfolgreich mit einem Wert von 0 zurückgegeben, aber die Verbindung scheint immer noch zu bleiben.UNIX-Domänen-Socket nicht geschlossen nach close()
Da QMP mehrere Verbindungen an seinem Socket nicht wirklich unterstützt, schlagen alle nachfolgenden Aufrufe für die Verbindung zum Socket fehl, da sie unbegrenzt auf das Schließen der Verbindung warten.
Gibt es eine Möglichkeit, aus dem Code zu überprüfen, dass der Socket wirklich geschlossen ist, und gibt es eine Möglichkeit, den Socket zum Schließen zu zwingen?
Es klingt, als ob der QEMU-Server-Prozess den Inhalt des letzten send() nicht vollständig gelesen hat. Was passiert, wenn Sie anstelle von Domain-Sockets TCP verwenden? Gibt es einen Unterschied im Verhalten? – user590028
Das Verhalten, das ich gerade beschrieben habe, ist nicht 100% reproduzierbar, und leider ist die Verwendung von TCP für mich keine Option. – mgamal
Können wir die Ausgabe von netstat -ap sehen? – user590028