05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

258 5 Netzwerkprogrammierung in der Praxis<br />

48<br />

49 /*<br />

50 * In einer Endlosschleife verarbeitet der Server nun die<br />

51 * eingehenden Clientverbindungen. Da es sich um ein<br />

52 * Beispiel für einen inkrementellen Server handelt ,<br />

53 * erfolgt die Bearbeitung strikt sequentiell.<br />

54 */<br />

55<br />

56 for(;;)<br />

57 {<br />

58 slen = sizeof( sa );<br />

59<br />

60 /* Neue Socketverbindung annehmen */<br />

61 if( ( client = accept( sd, (struct sockaddr *)&sa,<br />

62 &slen ) ) < 0 )<br />

63 {<br />

64 if( daemon_exit ) /* Falls ein SIGTERM kam: Ende */<br />

65 break;<br />

66<br />

67 /* accept() wurde nicht durch SIGTERM unterbrochen */<br />

68 syslog( LOG_ERR , "accept() failed: %s",<br />

69 strerror( errno ) );<br />

70<br />

71 /* Trotz Fehler brechen wir nicht ab! */<br />

72 continue;<br />

73 }<br />

74<br />

75 /* Clientverbindung sequentiell behandeln */<br />

76 handle_client( client );<br />

77<br />

78 /* Socketdeskriptor schließen , Verbindung beenden */<br />

79 close( client );<br />

80 }<br />

81<br />

82 /* Falls die Schleife durch SIGTERM beendet wurde */<br />

83 print_srv_stats(); /* CPU-Statistik ausgeben */<br />

84<br />

85 unlink( PIDFILE ); /* PID-Datei entfernen */<br />

86 exit( EXIT_SUCCESS ); /* Daemon beenden */<br />

87 }<br />

47<br />

Bevor es nun <strong>mit</strong> der Verarbeitung der ersten Anfragen los geht, werden von<br />

init_srv_stats() noch die aktuellen CPU-Statistiken gespeichert. Am Programmende<br />

können dann die hier festgehaltenen Werte zur Berechnung der<br />

Zeitdifferenz <strong>und</strong> da<strong>mit</strong> der für die Anfragen aufgewendeten Rechenzeit herangezogen<br />

werden (vgl. dazu Beispiel 5.11).

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!