2️⃣ 개발 지식 B+/OS
[네트워크] echo 예제로 이해하는 소켓 인터페이스
ddubbu
2024. 9. 16. 19:12
소켓통신 파일 처리와 같다?
- Unix/Linux 시스템에서는, 모든 I/O 자원이 파일처럼 취급된다.
- 소켓도 file descriptor(식별자)를 통해 접근할 수 있는 "열린 파일"
- 소켓을 열면, 파일을 다루는 방식과 유사하게 소켓에 대해 읽기/쓰기/닫기 등의 작업이 가능
rio 구조체를 이용해 소켓 다루기
void rio_readinitb(rio_t *rp, int fd)
{
rp->rio_fd = fd;
rp->rio_cnt = 0;
rp->rio_bufptr = rp->rio_buf;
}
// 사용 예시 : rio 구조체를 socketfd와 연결된 소켓으로 초기화
rio_readinitb(rp, socketfd)
그림으로 이해하는 소켓 인터페이스

주의사항
- listenfd : (listen 함수) 서버가 클라 연결 요청을 수신 대기하기 위한 소켓
- connfd : (accept 함수) 클라와 연결이 성립된 후에 사용하는 소켓
- listen() 쓰레드 (母) 와 분리됨. 서버는 여러 요청을 받아야해서 계속 대기 상태이고, accept() 쓰레드 (子) 요청을 처리하도록 만들어둠

주석과 함께 코드 이해하기
Client단 코드
webproxy-jungle/textbook/echo_client.c at main · ddubbu-dev/webproxy-jungle
Contribute to ddubbu-dev/webproxy-jungle development by creating an account on GitHub.
github.com
Server단 코드
webproxy-jungle/textbook/echo_server.c at main · ddubbu-dev/webproxy-jungle
Contribute to ddubbu-dev/webproxy-jungle development by creating an account on GitHub.
github.com
결과물
