2013-01-20 3 views
4

저는 boost :: asio를 사용하고 클라이언트에게 목록을 보내고 완료되면 소켓을 닫습니다. 어떻게 든 클라이언트 때때로은 모든 것을 받기 전에 End Of File 오류를 얻습니다.Boost.Asio - 상대방이 데이터를 수신했는지 확인하십시오.

저는 이것이 마지막 목록 항목을 보낸 직후에 소켓을 닫는 서버와 관련이 있다고 생각합니다. 이 async_send를 해결하여 데이터가 성공적으로 전송 된 후에 만 ​​핸들러를 호출하는 쉬운 방법이 있습니까?

아니면 내 End Of File 오류가 다른 것으로 발생합니까?

+2

"완료시"를 정의하십시오. 몇 가지 코드를 보여주십시오. –

답변

2

Boost.Asio는 TCP 및 UDP 소켓을 통해 운영 체제에 독립적 인 추상화 계층입니다. 다른 응용 프로그램이 데이터를 수신하고 처리했음을 보증하지 않습니다. 이 논리를 응용 프로그램에 포함시켜야합니다. OSI model을 연구 할 수 있습니다.

async_send()이 반환 한 직후에 소켓을 닫는 경우 올바르지 않습니다. 완료 핸들러가 호출 된 후에 만 ​​닫아야합니다.

+0

완료 핸들러에서 닫는 것은 어떻습니까? 그게 내가 atm하고 있지만 작동하지 않는 것입니다. – jhasse

+0

@jhasse 완료 핸들러 내에서 소켓을 닫는 것은 의미 적으로 호출 된 후 닫기와 같습니다. 도움이 필요하면 질문에 코드를 게시해야합니다. –