내 서버 응용 프로그램에 부스트 비동기 소켓을 사용하고 있습니다. boost() 함수를 호출하여 boost의 close()를 호출 한 다음 소켓 (연산자 delete)을 삭제합니다. 그리고 비동기 중 하나에서 함수가 호출되면 괜찮습니다. 처리기로 처리하지만, 메인 코드베이스 내부에서 호출하면 전체 애플리케이션이 비동기 처리기 중 하나에서 충돌합니다. 부스트에서 소켓을 멋지게 닫는 방법?Boost :: asio 소켓 - 연결을 끊는 방법?
4
A
답변
2
해당 개체를 사용할 수있는 핸들러가 존재하는 한 해당 개체가 살아 있는지 확인하십시오.
그것은 당신이 (그것이 이 핸들러에 오류를보고로) CLOSE 호출 후 죽은 포인터에 액세스 한 후이 소켓이라고 사용하는 핸들러 중 하나 ...
보통, 생활 시간 처리 할 수있는 가능성이 boost::shared_ptr
및 boost::enable_shared_from_this
으로 쉽게 처리하고 처리기로 전달하십시오. Boost.Asio와 함께 제공되는 수많은 예제를 참조하십시오.
일단이 기술에 익숙해지면 요청한 질문이 당신에게 사소한 것처럼 보일 것입니다.
1
소켓의 종료 방법을 조사하고 싶습니다. 그것은 귀하의 충돌 응용 프로그램을 해결하지 않습니다. 위의 Artyom은 이미 그 원인을 설명했지만 그럼에도 불구하고 흥미 롭습니다. shutdown을 호출하지 않고 소켓을 닫으면 gracefull FIN 핸드 셰이크 대신 RST가 전송 될 수 있습니다.
+0
확실하게 오래 끄면 RST 만 표시됩니다. –
관련 문제
- 1. MySQL 연결을 끊는 방법
- 2. boost asio ssl stream 소켓 컴파일 문제
- 3. 코드로 인터넷 연결을 끊는 방법?
- 4. 부스트 asio : 클라이언트 연결을 유지하는 방법?
- 5. boost :: asio : 들어오는 연결을 받아들이려면 async_accept를 어떻게 사용합니까?
- 6. 부스트 :: ASIO :: IP : TCP : 소켓
- 7. boost :: asio :: io_service가 예외를 던졌습니다
- 8. boost :: asio :: async_resolve 문제
- 9. 부스트 Asio 및 웹 소켓?
- 10. 블루투스 연결을 끊는 방법 (HTC Desire)
- 11. boost asio io_service.run()
- 12. 메모리 조각화 @ boost :: asio?
- 13. Boost :: asio 및 async_read
- 14. boost :: asio :: async_read_until 문제
- 15. 데이터베이스에 기존 루비 sequel 연결을 끊는 방법?
- 16. 프로그래밍 방식으로 USB를 연결하고 연결을 끊는 방법
- 17. Windows 리모트 디렉토리 연결을 끊는 방법?
- 18. directshow를 사용하여 웹캠의 연결을 끊는 방법?
- 19. 소켓 및 사용자 값에 대한 비동기 쓰기 (boost :: asio 질문)
- 20. 이전 데이터를 읽는 C++ boost asio tcp 소켓
- 21. 부스트 asio 소켓 : 어떻게 자신의 IP를 얻으려면, 포트 주소?
- 22. 부스트 ASIO TCP 소켓 연결을 통해 얼마나 많은 데이터가 전송되었는지 확인하는 방법은 무엇입니까?
- 23. boost :: asio UDP Windows에서 메시지를받는 방법?
- 24. 차단을위한 C++ boost asio timeout 연결
- 25. Protobuf 메시지 보내기 boost :: asio
- 26. C++ Boost ASIO 간단한주기 타이머?
- 27. 일부 작업 연속화 - boost :: asio
- 28. boost :: asio 서버 다중 프로세스
- 29. boost :: asio 깨끗하게 연결 해제
- 30. Boost :: asio async_wait 처리기 서명
원시 포인터는 더 원시입니다. 스마트 포인터는 사용하지 않는 것이 좋습니다. – vladimir
@vladimir, 당신이 뭔가가 더 원초적이라고 생각하기 때문에, 좋은 연습이되지는 않습니다. 스마트 포인터는 그렇지 않으면 ballache가 될 수있는 많은 문제를 해결합니다. –
+1 문장에서 "ballache"를 사용합니다. –