"qual è la filosofia alla base di questo modello"
Event driven significa che non c'è "monitoraggio", ma che l'evento stesso avvia l'azione.
Di solito questo viene avviato da un'interruzione, che è un segnale al sistema da un dispositivo esterno o (nel caso di un'interruzione software) da un processo asincrono.
https://en.wikipedia.org/wiki/Interrupt
Ulteriori letture sembrano essere qui:
https://docs.oracle.com/cd/E19455-01/806-1017/6jab5di2m/index.html#sockets-40- "I/O socket guidato da interrupt"
Anche http://cs.baylor.edu/~donahoo/practical/CSockets/textcode.html ha alcuni esempi di socket guidati da interrupt, così come altri esempi di programmazione di socket.
Devi assolutamente leggere quanto segue:http://www.kegel.com/c10k.html. Quella pagina è la perfetta panoramica delle tecniche basate sugli eventi e asincrone.
Tuttavia, una risposta veloce e sporca :event-driven non è né non bloccante né asincrono.
Event-driven significa che il processo monitorerà i propri descrittori di file (e socket) e agirà solo quando si verifica un evento su un descrittore (gli eventi sono:dati ricevuti, errore, diventato scrivibile, ...).
I socket BSD hanno la funzione "select()". Quando viene chiamato, il sistema operativo monitorerà i descrittori e tornerà al processo non appena si verifica un evento su uno dei descrittori.
Tuttavia, il sito Web di cui sopra ha descrizioni molto migliori (e dettagli sulle diverse API).