В неблокирующей операции у вас обычно есть точка в программе, где она ожидает, когда любой из неблокирующих файловых дескрипторов сообщит о доступности данных.
В приведенном вами примере это строка select(...)
. На практике у вас либо есть такой централизованный выбор самостоятельно, либо основной цикл запускается другой библиотекой, в которую вы передаете дескрипторы, о готовности которых вы хотите получать уведомления (например, в GTK это может быть g_source_add_unix_fd ).