2017-12-27 50 views
1

I 부스트 문서 here에 SSL 서버 예제를 적용하려고 시도했지만 정상적인 boost::asio::ip::tcp::socket 또는 SSL 소켓을 사용할 수있는 응용 프로그램을 만들고 싶습니다. 그러나 void do_something_with_socket(boost::asio::ip::tcp::socket& sock)과 같은 함수에 전달하는 좋은 방법을 찾지 못했습니다. SSL 소켓은 원시 TCP 소켓을 상속받지 않습니다. 내가 생각할 수있는 유일한 방법은 어디서나 템플릿을 사용하는 것이지만, 더 좋은 방법이 있는지 궁금해하고 있었습니까? 감사.boost :: asio :: ssl :: stream <boost :: asio :: ip :: tcp :: socket>을 boost :: asio :: ip :: tcp :: socket 형식의 인수로 사용하는 방법

편집 : 나는 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>의 멤버를 통해 살펴본 next_layer()boost::asio::ip::tcp::socket입니다 발견했습니다하지만 난 그것을 시도하고 나는이가 SSL 스트림을 사용하는 원시 소켓 추측 때문에 데이터를 암호화하지 않습니다 ?

답변

1

다음 레이어 대신 lowest_layer()을 사용해보세요.

는 예를 들어,이 ASIO HTTP library는 "사방 템플릿"을 사용하여 다음과 같은 코드를 가진 SSL 소켓을 연결 : socket_boost::asio::ssl::stream<boost::asio::ip::tcp::socket>

void connect_socket(ConnectHandler connect_handler, 
        ASIO::ip::tcp::resolver::iterator host_iterator) 
{ ASIO::async_connect(socket_.lowest_layer(), host_iterator, connect_handler); } 

입니다.