libevent позволит вам получить событие, когда в сокете есть данные или когда сокет необходимо закрыть.Точнее, вы хотите настроить сокет так, чтобы он уведомлял вас о событии чтения (EV_READ) и в функции обратного вызова функции проверял, равно ли возвращаемое значение из recv 0, что указывает на то, что сокет на другом конце отключился, или -1, что указываетошибка.В первом случае, когда возвращаемое значение равно 0, вы хотите закрыть сокет.Во втором случае, когда возвращение -1 указывает на какую-то «ошибку», то, что вы делаете, зависит от характера ошибки.Например, recv может вернуть -1 и установить для errno значение EINTR, указывающее, что функция была прервана, например, через прерывание SIGUSR1.Как вы справитесь с этим, зависит от того, что должно делать ваше приложение.