Frage

Wir haben ein Programm, in C geschrieben, dass RPC-Anwendungen mit einem anderen Programm zu kommunizieren (auch in C geschrieben) auf demselben Linux-Server (in einigen Produktions-Setups, das zweite C-Programm würde auf einem anderen Rechner, daher RPC statt IPC).

Wenn Sie von anderen C-Programmen aufgerufen, CRON oder die Befehlszeile, es funktioniert wie erwartet und wurde dabei so seit vielen Jahren, so ist es sicher zu sagen, es funktioniert im Allgemeinen.

Das gleiche Programm, von einem Groovy Skript aufgerufen, fehlschlägt, offenbar mit Netzwerkproblemen.

In dem C-Programm, svc_register(xprt, prognum, versnum, dispatch, protocol) erfolgreich, aber dann

  • auf dem RPC-Server nach Anfrage: clnttcp_create schlägt mit "Verbindung abgelehnt"
  • auf dem RPC-Client auf Antwort warten: select auf svc_fdset nicht mit EBADF

Groovy-Programm (nur der Vollständigkeit halber, nicht viel zu sehen hier):

[ "myprogram", "someoption", "someprogram" ].execute()

Was könnten wir versuchen, das Problem zu lokalisieren und zu beheben?

War es hilfreich?

Lösung

Offenbar RPC Aufruf basierte C-Programme von Groovy tut in der Tat Arbeit.

Das Problem verengt werden könnte, um die Frage nach unten, dass „(int) sysconf (_SC_OPEN_MAX)“, der verwendet wird, um die Anzahl der fds in svc_fdset (eine Struktur verwendet, Antworten von rpc-Anfragen zu erhalten), um zu bestimmen, falls nicht scheitern von von einem C-Programm verwendet wird, von Groovy genannt.

Andere Tipps

Führen Sie das Programm durch strace, um zu sehen, was Systemaufruf (e) ist / sind, versagen.

Überprüfen Sie, ob myprogram ausgegeben hat oder wartet auf die Eingabe. Wenn Sie nicht über die Ausgabe lesen oder die Eingabe zu schließen, dann wird es hängen, zu Timeouts in dem RPC-Aufruf führt. Erstellen Sie einen Faden, der in und err von myprogram und in der Nähe out lautet:

def p = [ "myprogram", "someoption", "someprogram" ].execute()
p.out.close()
p.consumeProcessOutput()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top