Verständnisproblem Socket Programmierung Select



  • Also ich habe 3 Sockets von denen ich asynchron lesen will.

    fd_set readers;
    FD_ZERO(&readers);
    FD_SET(serversockCam, &readers);
    FD_SET(serversockRec, &readers);
    FD_SET(serversockClass, &readers);
    
    int maxHandle = max(serversockCam, serversockRec, serversockClass) + 1;
    int retval = select(maxHandle, &readers, NULL, NULL, NULL);
    

    Der Befehle select() ist für alle Programme interessant, die ein dynamisches Protokoll implementieren, das nicht immer nach dem Schema senden-empfangen-senden-empfangen läuft, sondern erkennen muss, ob Daten zu lesen oder zu schreiben sind. Ausserdem kann select() verwendet werden, wenn ein Server als einzelner Prozess mehrere Clients bedienen soll, da hier der Server erkennen kann, auf welchem Socket etwas gesendet / empfangen werden soll.

    wie?

    Der Rückgabewert sagt mir ja nur das etwas empfangen werden kann aber nicht bei welchem Socket.

    MfG Jens



  • dafür ist FD_ISSET da

    man select schrieb:

    Four macros are provided to manipulate the sets. FD_ZERO() clears a set. FD_SET() and FD_CLR() respectively add and remove a
    given file descriptor from a set. FD_ISSET() tests to see if a file descriptor is part of the set; this is useful after select()
    returns.

    PS: das ganze hat nichts mits ANSI C zu tun!



  • ah danke das wars


Anmelden zum Antworten