"Was ist die Philosophie hinter diesem Modell"
Ereignisgesteuert bedeutet, dass es keine "Überwachung" gibt, sondern dass das Ereignis selbst die Aktion auslöst.
Normalerweise wird dies durch einen Interrupt ausgelöst, der ein Signal von einem externen Gerät an das System ist, oder (im Fall eines Software-Interrupts) durch einen asynchronen Prozess.
https://en.wikipedia.org/wiki/Interrupt
Weiterführende Literatur scheint hier zu sein:
https://docs.oracle.com/cd/E19455-01/806-1017/6jab5di2m/index.html#sockets-40- "Interrupt-Driven Socket I/O"
Auch http://cs.baylor.edu/~donahoo/practical/CSockets/textcode.html enthält einige Beispiele für Interrupt-gesteuerte Sockets sowie andere Socket-Programmierungsbeispiele.
Sie müssen unbedingt Folgendes lesen:http://www.kegel.com/c10k.html. Diese Seite ist der perfekte Überblick über ereignisgesteuerte und asynchrone Techniken.
Allerdings eine Quick &Dirty Antwort :ereignisgesteuert ist weder nicht-blockierend noch asynchron.
Ereignisgesteuert bedeutet, dass der Prozess seine Dateideskriptoren (und Sockets) überwacht und nur dann handelt, wenn ein Ereignis auf einem Deskriptor auftritt (Ereignisse sind:Daten empfangen, Fehler, beschreibbar geworden, ...).
BSD-Sockets haben die "select()"-Funktion. Wenn es aufgerufen wird, überwacht das Betriebssystem die Deskriptoren und kehrt zum Prozess zurück, sobald ein Ereignis bei einem der Deskriptoren auftritt.
Die obige Website bietet jedoch viel bessere Beschreibungen (und Details zu den verschiedenen APIs).