Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung


'Wie werde ich Unix-Guru' als Buch bestellen
A. Willemer
Wie werde ich UNIX-Guru
I  ANWENDUNG
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.

II  ADMINISTRATION
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel

III  NETZWERK
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls

IV  DAS X-WINDOW SYSTEM
Die grafische Oberfläche von UNIX einrichten und nutzen

V  PROGRAMMIERUNG VON SHELLSKRIPTEN
Automatisieren von Tasks durch Shell-Skripte.

VI  PERL
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk

VII  PROGRAMMIERWERKZEUGE
C-Compiler, Analyse-Tools, CVS, yacc, diff

VIII  UNIX-SYSTEMAUFRUFE
UNIX-Befehle in eigenen Programmen nutzen

IX  LITERATUR
Weiterführende Literatur zu UNIX und LINUX

 
Galileo Computing / <openbook> / "Wie werde ich UNIX-Guru ?"
« Rahmenprogramm eines Client-Server Paars Client-Server Socketprogrammierung IPv6 aus Programmierersicht »

Mehrere Sockets parallel abfragen

Ein anderes Thema der Socketprogrammierung ist die parallele Bearbeitung mehrerer Ports durch einen einzigen Prozess. Ein Beispiel für ein solches Programm ist inetd, der so genannte Internetdämon, der für alle in der inetd.conf aufgeführten Ports die Anfragen entgegen nimmt und den benötigten Server aufruft. Er arbeitet mit dem Aufruf select(), der mehrere Dateideskriptoren und damit Sockets parallel abhorchen kann.

#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int MaxHandle, fd_set *Lesen,
           fd_set *Schreiben,  fd_set *OutOfBand,
           struct timeval *TimeOut);

Zentrale Objekte sind in diesem Zusammenhang die Dateideskriptorenarrays. Von diesen nimmt select() drei an. Da gibt es je einen Satz zum Lesen, zum Schreiben oder um Ausnahmen, wie Nachrichten außerhalb der Reihe zu beobachten. Wollen Sie nicht alle Kategorien beobachten, geben Sie bei den uninteressanten Parametern den Wert NULL an.

Sollen die Sockets a und b zum Lesen beobachtet werden, dann muss ein fd_set angelegt und damit gefüllt werden:

fd_set lesesockets;

FD_ZERO(&lesesockets);
  FD_SET(a, &lesesockets);
  FD_SET(b, &lesesockets);

maxHandle = max(a, b) + 1;

select(maxHandle, &lesesockets, NULL, NULL, NULL);

select() blockiert so lange, bis auf einem der Sockets Daten ankommen. Soll ein Timeout definiert werden, so muss der letzte Parameter besetzt werden. Dann wird die Funktion nach einer gewissen Zeitspanne unterbrochen, die in einer Variablen von Typ timeval festgelegt wird, und als letzter Parameter an select() übergeben wird. Im Beispiel wird eine zehntel Sekunde eingestellt.

struct timeval myTime;
  ...
  myTime.tv_sec = 0;
  myTime.tv_usec = 100000;

select(maxHandle, &lesesockets, NULL, NULL, &myTime);

Die Fähigkeit von select(), einen Timeout im Mikrosekundenbereich festzulegen, wird manchmal dazu missbraucht, um einen Prozess für kurze Zeit schlafen zu legen. Die eigentlich dafür zuständige Funktion sleep() legt einen Prozess für mindestens eine Sekunde schlafen, was manchmal zu viel ist. Um dies zu erreichen, kann man die ersten vier Parameter auf 0 setzen.



« Rahmenprogramm eines Client-Server Paars | Client-Server Socketprogrammierung | IPv6 aus Programmierersicht »
 
 Zum Katalog
Zum Katalog
Wie werde ich UNIX-Guru?
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 UNIX/Linux

PHP 4-Workshop

Einstieg in Python

Perl fürs Web

MySQL 4

GNOME 2.0
 Empfehlung

Einstieg in XML
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info

 MyGalileo
Der Service für registrierte Leser:
Zu MyGalileo
Info



Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de