-
boost asio 사용 시 win32 버전을 지정하지 않으면 io_context::run이 빠져나가는 현상프로그래밍/의문 2019. 4. 14. 04:09반응형
asio를 이용해 tcp 서버를 만들었는데 async_accept 이벤트가 등록되어있음에도 io_context::run을 벗어났다.
_WIN32_WINNT에 타겟 윈도우 버전을 지정하니 벗어나는 현상이 없어졌다.(_WIN32_WINNT=_WIN32_WINNT_WIN10)
추가적인 확인 필요
발생한 상황
서버는 최대 세션이 10개 받아지도록 되어있다. 세션이 끊어지면 소켓을 닫고 닫힌 소켓에 async_accept를 걸도록 되어있다.
클라이언트는 100개의 세션을 동시에 연결하고 동시에 연결을 끊는다.
서버는 다시 async_accept를 걸었다는 로그가 찍혀있지만 아무 에러 없이 io_context::run이 빠져나갔다.
다음과 같은 상황에선 발생하지 않았다.
위 상황에서 서버는 최대 세션이 110개 받아지도록만 설정한다.
클라이언트는 100개의 세션을 동시에 연결하고 동시에 연결을 끊는다.
동시 연결 + 연결 끊기를 여러번 반복하여도 끊기지 않는다.
반응형'프로그래밍 > 의문' 카테고리의 다른 글
c# Regex의 패턴은 캐싱 된다. (0) 2019.05.10 할당한 메모리가 working set에 잡히지 않던 현상 (0) 2019.04.23 CRITICAL_SECTION의 default spin count (0) 2019.04.10 C# Excel Application이 예외 발생 시 종료되지 않는 현상 (0) 2019.03.31 암호화 라이브러리 간 차이 때문에 암호화 결과가 달랐던 경우 (0) 2018.11.12