Socket 프로그래밍의 개념 요약
create : 소켓 생성
bind : IP와 포트번호가 중복되어 있는지 확인하는 역할
listen : 클라이언트의 접속 기다림
클라이언트가 접속 되었을 때 연결 요청에 대한 정보는 시스템 내부적으로 관리되는 큐에 쌓임. 이상태를 not entablished state(대기 상태) 라고함
대기 중인 연결 요청을 큐로부터 꺼내와서 연결을 완료하기 위해서는 accept() api를 호출
accept : 클라이언트의 연결 요청을 받아들여 소켓 간 연결을 수립, 이전에 생성한 socket이 아닌 accept에서 새로운 소켓이 생성된다. 해당 소켓을 통해 데이터 통신이 이루어짐
close : 서버 소켓에서는 accept에서 생성된 소켓도 관리해야 함.
최종적으로 멀티플렉싱을 지원하는 서버 소켓을 구현해야 하므로 시스템 콜을 사용해야 한다.
유닉스에서는 모든걸 파일로 관리한다고 한다.
소켓도 마찬가지.
따라서 파일디스크립터를 통해 소켓의 커넥션 여부를 확인할 수 있는것으로 보여지는데 이때 사용되는 것이 시스템콜.
종류는 엄청 많은데 파일관리 함수만 알고있으면 될듯하다.
대표적으로 논블라킹 소켓을 사용할땐 select, epoll을 사용하는것으로 보여진다.
select는 fd_set이라는 파일 비트 배열에 파일 그룹을 넣어 파일디스크립터의 값이 변했는지 확인하는 방식으로 동작한다. 관리할 수 있는 최대 크기가 1024이기 때문에 커넥션을 1024까지밖에 못만든다.
epoll은 select의 한계점을 보완해서 만들어진 리눅스 시스템콜이라 한다.
fd에 대한 루프를 돌지 않고, 커널에게 정보를 요청하는 함수를 호출할 때마다 전체 관찰 대상에 대한 정보를 넘기지 않아도 커널에서 처리를 해준다.
https://recipes4dev.tistory.com/153
https://applefarm.tistory.com/144
'CS > ETC' 카테고리의 다른 글
무전기 개념 모음 (0) | 2022.11.25 |
---|---|
APK가 만들어지는 과정 (0) | 2022.05.26 |
윈도우 시스템 종료 제한 (0) | 2021.11.11 |
IntelliJ Run Console이 지저분하게 나올 때 (Executing task....) (0) | 2021.07.22 |
안드로이드 스튜디오 Kotlin Hint 설정 (0) | 2021.07.09 |