phpbar.de logo

Mailinglisten-Archive

[php-gtk] Auf Socket-Verbindung warten?

[php-gtk] Auf Socket-Verbindung warten?

Christian Hofmann hofmann at privatesponsor.de
Mon Mar 19 15:03:25 CET 2001


Hallo,


> Währe cool wenn du den inhalt mal für alle, denen  das man
> ebenfalls fehlt
> mal eben pasten könntest .)


Ich weiß nicht ob es das ist was Du suchst (finds bei mir auch
nicht unter linux):

-SNIP-

.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" This manpage is copyright (C) 1992 Drew Eckhardt,
.\"                 copyright (C) 1995 Michael Shields.
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" Modified 1993-07-24 by Rik Faith <faith at cs.unc.edu>
.\" Modified 1995-05-18 by Jim Van Zandt <jrv at vanzandt.mv.com>
.\"
.\" Sun Feb 11 14:07:00 MET 1996  Martin Schulze  <joey at linux.de>
.\"	* translated from english to german
.\"
.TH SELECT 2 "27. April 1996" "Linux" "Systemaufrufe"
.SH BEZEICHNUNG
select \- Synchrone I/O-Multiplexsteuerung
.SH ÜBERSICHT
.B #include <sys/time.h>
.br
.B #include <sys/types.h>
.br
.B #include <unistd.h>
.sp
.BI "int select(int " n ", fd_set *" readfds ", fd_set *"
.IB writefds ", fd_set *" exceptfds ", struct timeval " timeout ");"
.sp
.BI "FD_CLR(int " fd ", fd_set *" set );
.br
.BI "FD_ISSET(int " fd ", fd_set *" set );
.br
.BI "FD_SET(int " fd ", fd_set *" set );
.br
.BI "FD_ZERO(fd_set *" set );
.fi
.SH BESCHREIBUNG
.B select()
wartet für eine Reihe von Dateideskriptoren, daß sich deren Status
ändert.

Es werden drei voneinander unabhängige Mengen von Deskriptoren
behandelt.  Bei den in
.I readfds
enthaltenen wird darauf geachtet, daß neue Zeichen zum Lesen
ankommen, bei den in
.I writefds
angegebenen wird reagiert, wenn weitere Zeichen geschrieben werden
können, und bei den in
.I exceptfds
angegebenen Deskriptoren wird reagiert, wenn etwas außergewöhnliches
passiert ist.  Wenn die Routine beendet wird, werden die übergebenen
Mengen so verändert, daß sie anzeigen, welcher Deskriptor seinen
Status geändert hat.

Vier Makros werden bereitgestellt, um mit diesen Mengen zu arbeiten.
.B FD_ZERO
löscht eine Menge,
.B FD_SET
und
.B FD_CLR
fügt einen Deskriptor zur Menge hinzu bzw. löscht diesen,
.B FD_ISSET
prüft, ob der Deskriptor in der Menge enthalten ist.  Dieses ist
insbesondere nach einem
.BR "select()" -Aufruf
sinnvoll.

.I n
entspricht der Zahl des am höchsten nummerierten Datei-Deskriptors in allen
drei Mengen, plus 1.

.I timeout
ist eine obere zeitliche Grenze, die
.B select()
wartet, bis es weitergeht.  Ist der Wert null, kehrt
.B select()
sofort zurück.  Wenn
.I timeout
.B NULL
ist (kein timeout), kann
.B select()
unendlich lang blockieren.

.SH "RÜCKGABEWERTE"
Bei Erfolg gibt
.B select()
die Anzahl der Deskriptoren zurück, deren Status sich geändert hat.
Wenn ein Fehler aufgetreten ist, wird \-1 zurückgegeben und
.I errno
entsprechend gesetzt.  Die Mengen und
.I timeout
befinden sich in einem undefinierten Zustand, auf deren Inhalt sollte
sich also bei einem Fehler nicht mehr verlassen werden.

.SH FEHLER
.TP 0.8i
.B EBADF
In einer der Mengen wurde ein ungültiger Datei-Deskriptor angegeben.
.TP
.B EINTR
Ein nicht-blockierendes Signal wurde empfangen.
.TP
.B EINVAL
.I n
ist negativ.
.TP
.B ENOMEM
.B select()
ist nicht in der Lage, Speicher für die internen Tabellen zu
bekommen.

.SH ANMERKUNGEN
Einige Programme rufen
.B select()
mit drei leeren Mengen,
.I n
gleich null und einem von null verschiedenen
.I timeout
auf, um eine portable Möglichkeit zu haben, ein
.B sleep()
mit der Präzision von Bruchteilen einer Sekunde zu benutzen.

Bei Linux wird
.I timeout
derart verändert, daß es der nicht verstrichenen Zeit
entspricht (relativ zum vorherigen
.IR timeout ).
Die meisten anderen Implementierungen unterlassen dieses, was Probleme
mit sich bringt, wenn unter Linux geschriebener Quellcode, der
.I timeout
auswertet, auf andere Betriebssysteme portiert wird, und wenn Quellcode
von anderen Betriebssystemen auf Linux portiert wird, der das struct
timeval für mehrere
.BR select() s
in einer Schleife ohne Reinitialisierung verwendet.  Portabler Code
sollte daher annehmen, daß
.I timeout
undefiniert ist, nachdem
.B select()
beendet ist.

Nachdem der einzige Schreiber eine named Pipe schließt, wird
.B select()
zurückkehren und angeben, daß etwas von der Pipe gelesen werden kann.
Wenn dann von dieser gelesen wird, wird
.BR read (2)
0 zurückliefern, was das Dateiende markiert.  Code, der annimmt, daß
.B select()
blockiert, sollte die Pipe mit
.B O_RDWR
statt
.B O_RDONLY
öffnen.

.SH BEISPIEL
.nf
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    fd_set rfds;
    struct timeval tv;
    int retval;

    /* Achte auf stdin (fd 0), um zu sehen, wenn es
     * Eingaben gibt.
     */
    FD_ZERO(&rfds);
    FD_SET(0, &rfds);
    /* Warte bis zu fünf Sekunden. */
    tv.tv_sec = 5;
    tv.tv_usec = 0;

    retval = select(1, &rfds, NULL, NULL, &tv);
    /* Verlaß Dich jetzt bloß nicht auf den Wert von tv! */

    if (retval)
        printf("Daten sind jetzt da.\\n");
        /* FD_ISSET(0, &rfds) müßte jetzt true sein. */
    else
        printf("Keine Datein innerhalb von fünf Sekunden.\\n");

    exit(0);
}
.fi
.SH "SIEHE AUCH"
.BR accept (2),
.BR connect (2),
.BR read (2),
.BR recv (2),
.BR send (2),
.BR write (2).

-SNAP-


Ich habe das in der man-pages-de-0.2.tar gefunden.

CU

Christian



php::bar PHP Wiki   -   Listenarchive