Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » Computer & Co » C: msgrcv() hängt sich auf Antworten
C: msgrcv() hängt sich auf

Ehemaliges Mitglied (#1460)
Posting-Schinder


Beiträge: 614


Moin,

habe da ein wichtiges Problem in C und hoffe, auch C-Programmierer lesen dieses Forum!

Es geht da um zwei Server, die mittels Message Queue miteinander kommunizieren. Server1 schickt hin und wieder ein paar Kommandos an Server2, z.B. um ihn zu fragen "Bist Du online?" oder um ihm mitzuteilen "Achtung, ich schicke Dir jetzt ein Kommando!"
Nach letzterem schickt Server1 in der Tag ein Kommando.

Wenn ich mir per "ipcs -q" die Message Queue ansehe, zeigt mir ein "R" an zweiter Stelle, dass Daten in der MSQ drinstehen. Server2 läuft und hängt im msgrcv(), das weiss ich, weil direkt vor dem msgrcv() ein Trace-Logfile geschrieben wird, und direkt danach auch. Der erste Trace ist im Logfile, der zweite nicht. Aber anscheinend liest Server2 diese MSQ nicht aus! Die Message Queue-ID ist korrekt und auch der Message Type stimmt mit dem gesendeten überein.

Bitte bitte, hat jemand nen Tipp, was ein msgrcv() zum Streiken animiert?

Danke,
-Efchen

  Profil   Editieren   Zitieren

Marcus
Forenheld


Beiträge: 884


ERRORS
The msgrcv() function will fail if:
[E2BIG]
The value of mtext is greater than msgsz and (msgflg & MSG_NOERROR) is 0.
[EACCES]
Operation permission is denied to the calling process. See IPC.
[EIDRM]
The message queue identifier msqid is removed from the system.
[EINTR]
The msgrcv() function was interrupted by a signal.
[EINVAL]
msqid is not a valid message queue identifier.
[ENOMSG]
The queue does not contain a message of the desired type and (msgflg & IPC_NOWAIT) is non-zero.

Hilft das weiter? C ist soo lange her

  Profil   E-Mail   Editieren   Zitieren

Ehemaliges Mitglied (#1460)
Posting-Schinder


Beiträge: 614


Entschuldige, nein, das hilft nicht, das Manual hab ich auch ;-(
Und, mein msgrcv FAILT ja nicht, es liest einfach nicht mehr weiter.

Server2 steht im msgrcv und wartet auf irgendwas (was, das möcht ich wissen!), obwohl die MSQ gefüllt ist, auch mit dem richtigen mtype. Wenn msgrcv failen würde, dann hätte ich ja Zugriff auf die von Dir beschriebenen Fehlermeldungen über errno. Aber so weit kommts ja gar nicht. msgrcv wartet und tut nichts mehr.

Noch jemand Ideen?

Natürlich danke trotzdem für Deinen guten Willen, den wollte ich nicht schmählern!

  Profil   Editieren   Zitieren
 

Antworten
Nach oben