차단 연결을 수행하고 응답을 받으면 메시지를 처리하는 C++ 부스트 클라이언트가 있습니다. 나는 이상한 문제에 직면하고있다.차단을위한 C++ boost asio timeout 연결
tcp::resolver::query query(tcp::v6(), this->host, port,tcp::resolver::query::v4_mapped);
iterator = resolver.resolve(query);
socket = new tcp::socket(io_service);
socket->connect(*iterator);
ping6이 연결할 수 없지만 (IPV6이 활성화 된) 컴퓨터에 연결을 시도했습니다. 그래도 2 행에서 쿼리를 해결하는 동안 오류가 발생하지 않았습니다. 이 결과로 오류가 발생하기 전에 연결을 시도하는 데 너무 많은 시간이 걸립니다. 내 질문 : -
1) asio에서 차단 연결을 시간 초과 할 수 있습니까? 비동기 모드로 전환 할 수 없습니다.
2) 연결할 수없는 호스트를 해결하는 동안 어떻게 오류가 발생하지 않습니까?
어떤 조언은 ASIO 티켓 추적기 긴 discussion이있다,
@ Sam .. 빠른 응답을 감사드립니다. 사실, 타임 아웃은 요구 사항이 아닙니다. 주요 문제는 연결할 수없는 호스트를 쿼리하는 동안 오류없이 반복기를 얻는 것입니다. 결과적으로 소켓에 오류가 발생하기 전에 약 5 분이 걸립니다. "도달 할 수없는 호스트로 소켓 작업을 시도했습니다." – confused
아, IPV6 형식으로 hostname을 지정할 때이 동작을 추가하는 것을 잊어 버렸습니다. – confused
tcp :: resolver :: iterator의 유효성을 기본 생성자 iterator와 비교하여 해결 호출 후에 확인하십시오. –