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
|
| |
Der Serverprozess muss erreichbar sein. Dazu benötigt er einen
so genannten well known port. Diese Portnummer ist also den Clientprozessen
wohlbekannt.
Um einen Socket an diese Nummer zu binden, wird der Aufruf bind() verwendet.
Als Parameter verwendet er den Socket und eine Struktur sockaddr_in, die
diesen Port beschreibt. Ist alles in Ordnung, liefert bind() als Rückgabewert
eine 0, im Fehlerfall -1.
Der Aufruf listen() gibt an, wieviele Anfragen gepuffert werden können,
während der Server nicht im accept steht.
In fast allen Programmen wird 5 als Parameter verwendet, da dies das
Maximum einiger BSD-Systeme ist.
Auch listen() liefert als Rückgabewert eine 0, wenn alles glatt lief, ansonsten
eine -1.
accept() wartet auf die Anfrage eines Clients. Der Aufruf liefert als
Rückgabewert den Socket, mit dem der Server im weiteren die Daten mit dem
Client austauscht. Er verwendet zum Senden also nicht den gebundenen Socket.
Im Fehlerfall liefert accept() -1.
struct sockaddr_in AdrMySock, AdrPartnerSocket;
...
AdrMySock.sin_family = AF_INET;
AdrMySock.sin_addr.s_addr = INADDR_ANY; /* akzept. jeden */
AdrMySock.sin_port = PortNr; /* per getservbyname bestimmt */
bind(IDMySocket, &AdrMySock, sizeof(AdrMySock));
listen(IDMySock, 5);
do {
IDPartnerSocket = accept(IDMySocket,
&AdrPartnerSocket, &len);
Nicht zu vergessen: IDPartnerSocket muss nach Ende der Kommunikation
geschlossen werden, obwohl der Socket nicht explizit geöffnet wurde.
| |
|
|
Ihre Meinung? |
|
|
|
|
| |
| |
Shopping |
|
Versandkostenfrei bestellen in Deutschland und Österreich Info
|
|
| |
| |
|