본문 바로가기

CS/ETC

Socket 내용

반응형

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

 

소켓 프로그래밍. (Socket Programming)

1. 소켓(Socket) 만약 네트워크와 관련된 프로젝트를 진행하면서, 사용자(User)의 관점이 아닌, 개발자(Developer)의 관점에서 네트워크를 다뤄본 경험이 있다면, "소켓(Socket)"이라는 용어가 아주 낯설

recipes4dev.tistory.com

 

https://applefarm.tistory.com/144

 

리눅스 select, poll, epoll

알아보기 전에 꼭 알야아 할 키워드들이 있다. File Desciptor : 리눅스 혹은 유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념. 프로세스에서 특정 파일에 접근할 때 사용하는 추

applefarm.tistory.com

 

반응형