학교 수업/컴퓨터네트워크
스레드를 이용한 소켓 서버
식혜드식혜
2024. 10. 13. 18:59
- 서버에서 accept() 함수는 blocking 함수이다. 즉, 이 함수에선 접속자가 나타날 때까지 함수에서 결과값을 리턴하지 않고 기다린다. (유휴 시간)
그렇기 때문에 두 개 이상의 소켓을 동시에 사용하는 멀티유지 서버로 사용하기엔 어려움
=> 이를 해결하기 위해 스레드를 이용한 서버를 구축!
지금 만드는 서버는 이전보다 상용화에 더 가깝다. 서버는 동시에 여러 유저의 접속이 가능하며 유저와의 통신이 끝나도 실행이 종료되지 않고 다음 유저를 기다린다.
result : 결과를 리턴 받을 포인터
정상 종료 시, result에는 addrinfo 구조체로 구성된 링크드 리스트가 리턴(어쩌면 그냥 하나만 리턴될 수도 있다).
- 링크드리스트가 리턴되는 경우
하나의 호스트 이름에 여러 주소가 붙어있을 경우, 각 주소마다 하나의 구조체가 리턴
하나 이상의 socket type을 지원할 경우, 하나의 socket type마다 하나의 구조체가 리턴된다.
(하지만 만일 hint의 ai_socketype이 지정되어 있다면 이야기가 다르다)