next up previous contents
Next: O_NONBLOCK + poll()/select() Up: Programowe konfigurowanie sieci - Previous: Modyfikowanie ARP cache'u i   Contents

Komunikacja asynchroniczna

Klasyczna komunikacja synchroniczna jest bardzo prosta w implementacji ale zarazem mało efektywna. Co więcej w wielu sytuacjach program wcale nie będzie mógł spełnić swojego zadania przy użyciu tego sposobu komunikacji. Załóżmy, że chcemy stworzyć kilka gniazd nasłuchujących na kilku różnych portach. Robimy to mniej więcej tak:
    s1 = socket (...);
    s2 = socket (...);
    s3 = socket (...);
    ...
    listen (s1, ...);
    listen (s2, ...);
    listen (s3, ...);
    ...
    accept (s1, ...);
  
No właśnie - co teraz ?? Chcemy przecież obsługiwać klientów na 3 gniazdach NARAZ, a wywołanie accept na gnieździe s1 wstrzyma wykonywanie programu do momentu aż nadejdzie połączenie na to gniazdo. Do tego momentu nie jesteśmy w stanie obsługiwać dwóch pozostałych gniazd ... Jedynym wyjściem z tej sytuacji jest skorzystanie z komunikacji asynchronicznej i/lub gniazd nieblokujących. Rozpatrzymy obydwa przypadki.





Paweł Niewiadomski
2000-10-17