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.

99 exit( EXIT_FAILURE );<br />

100 }<br />

5.6 Nebenläufige Server <strong>mit</strong> Preforking 295<br />

101<br />

102 /* Prozeß in einen Daemon umwandeln */<br />

103 daemon_init( argv[0], PIDFILE , LOG_DAEMON );<br />

104<br />

105 init_srv_stats(); /* CPU-Statistik initialisieren */<br />

106<br />

107 /*<br />

108 * Da es sich um ein Beispiel für einen nebenläufigen<br />

109 * Server <strong>mit</strong> Preforking handelt , wird ein Pool von<br />

110 * Prozessen erzeugt , die dann die Clientverbindungen<br />

111 * annehmen <strong>und</strong> behandeln.<br />

112 */<br />

113<br />

114 for( i = 0; i < NUM_PROCS; i++ )<br />

115 {<br />

116 switch( child[i] = fork() )<br />

117 {<br />

118 case -1: /* Fehler */<br />

119 syslog( LOG_ERR , "fork() failed: %s",<br />

120 strerror( errno ) );<br />

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

122 break;<br />

123 case 0: /* Kindprozeß übernimmt Accept -Handling */<br />

124 accept_handler( sd ); /* Accept -Handler starten */<br />

125 exit( EXIT_SUCCESS ); /* Kindprozeß beenden */<br />

126 break;<br />

127 default: /* Elternprozeß: weiter <strong>mit</strong> accept() */<br />

128 break;<br />

129 }<br />

130 }<br />

131<br />

132 close( sd ); /* passiven Socket schließen */<br />

133<br />

134 for(;;)<br />

135 {<br />

136 pause(); /* Nur noch auf SIGTERM warten */<br />

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

138 break;<br />

139 }<br />

140<br />

141 /* Alle Kinder beenden <strong>und</strong> auf deren Ende warten */<br />

142 for( i = 0; i < NUM_PROCS; i++ )<br />

143 if( child[i] > 0 )<br />

144 kill( child[i], SIGTERM );<br />

145 while( wait( NULL ) > 0 )<br />

146 ;<br />

147

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!