Сервер вызывает accept() на блокирующий сокет и ждёт подключения.
Клиент вызывает connect() чтобы установить соединие, вызывает recv() на блокирующий сокет и ждёт данные.
После этого у сервера пропадает питание, т.е. TCP/IP соединение не закрывается корректно.
Но клиент продалжает висеть на recv().
После того, как сервер по новой вызовет accept(), соединение уже не установится, т.к. клиент должен использовать новый сокет, заново вызвать connect() и т.д.
Как клиент может узнать, что соединение разорвано? Попробовал как написано тут http://stunpix.com/post/socket-closed-detection/ , но poll() после обрыва возвращает 0, видимо из-за некорректного завершения соединения.