hi,
das mini unten soll nach jedem Alarm zum Makro (setjmp(...)) springen ..
Einmal funktioniert das ganze ja, aber danach halt nicht mehr.
das zweite beispiel (hier gefunden) funktioniert auch nach ein paar winzigen modifikationen noch. Leider nicht mit meinem Problem .... s. u.Code:#include <iostream> #include <signal.h> #include <unistd.h> #include <setjmp.h> static jmp_buf progzust; /* Funktion zur Behandlung des Timeout-Signals */ void sig_alrm(int snr) { longjmp(progzust, 1); } int main() { int timeout = 0; if (signal(SIGALRM, sig_alrm) == SIG_ERR) { std::cerr << "Signalhandler not installed (recv)" << std::endl; } if (setjmp(progzust) !=0 ) { timeout += 1; } alarm(1); std::cout << " weiter "<< std::endl; while(timeout < 3){} alarm(0); return 0; }
den Abbruch über ein Timeout wollte ich dazu verwenden mein kleines Problem (siehe unten) zu beheben. leider funktioniert das nicht so wie es sollte ....Code:#include <signal.h> #include <unistd.h> #include <stdio.h> #include <iostream> static int AlarmReached = 0; void Signalhandler(int sig) { AlarmReached += 1; alarm(1); } int main() { signal(SIGALRM, Signalhandler); alarm(5); // Nach 5 Sekunden auslösen std::cout << "und auf " << std::endl; while (AlarmReached < 5 ) { sleep(50); std::cout << "sleep" << std::endl; } }
und zweite frage:
mein problem liegt eigentlich darin, dass mein client beim lesen mit recv von einem bestehenden socket (http-verbindung) gelegentlich probleme hat.
leider läßt sich das ganze nicht abbrechen. laut debugger steckt er in der funktion recv drin:
<recv+28>: mov %edx,%ebx
das ganze scheint blockiert zu sein.
kann ich das mit fcntl ändern?
grüsse reinhard
Lesezeichen