C++ 을 사용해서 소켓 프로그래밍을 하던 중 listen api 에서 두번째 인자로 넘겨주는 backlog 라는 파라미터에 대해 정확하게 알고 있지 못했다.
우선 리눅스 메뉴얼에 들어가서 listen api 의 backlog 파라미터의 설명을 보면 다음과 같이 적혀있다.
즉 간단하게 보자면 큐 사이즈를 지정한다는 내용이다.
그런데 어떤 큐 사이즈를 지정하는것일까?
이제 아래 그림을 보자.
왼쪽이 서버에서 동시에 응답할 수 있는 최대 갯수라고 가정한다면 (현재로썬 3개) backlog 값이 5라고 했을때 아래와 같은 상황이 연출되는 것이다. 가운데 있는 listen backlog queue의 사이즈가 5로 잡혀있는 것이다. 그러니 10개의 요청이 들어왔을때 1, 2, 3 은 서버쪽에서 처리하고 있고 아직 처리되지 못한 5개의 요청이 큐 안에 잡혀있는 것이다.
그리고 1~3 번 중 하나가 TCP connection을 통해 데이터를 주고 받던 중 연결이 끊기면 그 자리를 이제 큐 안에 있던 4번 요청이 차지하게 되는 것이다.
생각보다 간단한 개념이다.
참고로 이 backlog 사이즈에 대해서는 무엇이 정확히 정답이라는 확실한 기준은 없다고 한다. (기준이 없으면 왜 쓰는걸까? 분명 기준이 있을텐데 실무 수준에서 정해지는 것 같다. 교수님한테 물어봐야지.)
아래 블로그에서 많은 도움을 받았다.
감사합니다.
https://velog.io/@techy-yunong/socket-programming-listen-API-backlog
'C & C++ > C++' 카테고리의 다른 글
[C++] C++ RapidJSON 라이브러리 사용법 (0) | 2022.11.10 |
---|---|
[C++] C++ select api와 inet_ntop api 정리 (0) | 2022.11.10 |
[C++] C++ 헷갈리는 개념 간단 정리 (2) (0) | 2022.11.09 |
[C++] Visual Studio 2022 에서 C++ rapidjson 사용하기 (0) | 2022.11.08 |
[C++] C++ 헷갈리는 개념 간단 정리 (1) (0) | 2022.11.07 |