Я имею дело с ошибочным сервером, который иногда не может принимать соединения () (но оставляет его слушающий сокет открытым). Это в Linux с доменными сокетами unix.
В настоящее время единственный способ обнаружить это состоит в том, что после отправки пакета данных буфер заполняется и блокируется, а сервер не отправляет никаких ответов. Этот длительный режим сбоя трудно отличить от других ошибок - сервер может не отвечать по другим причинам.
Особенно для доменных сокетов unix кажется, что ядро должно знать, произошло ли accept (); есть ли способ узнать это? Может ли клиент как-то заблокировать, пока accept () не произойдет, или хотя бы проверить, есть ли у него?
Это только для целей отладки, поэтому может быть немного уродливым.