C & C++/C++

[C++] C++ listen api 의 parameter 중 backlog.

Razelo 2022. 11. 10. 16:03

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

 

[소켓 프로그래밍] listen API의 backlog 무식하게 알아보기 (feat. gunicorn)

서버를 위한 socket 프로그래밍을 할 때, listen API를 사용해 socket에 binding 된 host와 port로 들어오는 커넥션 요청을 받겠다고 선언할 수 있다. listen API의 첫번째 인자는 socketfd이며, socket의 file desc

velog.io

반응형