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