본문 바로가기
2️⃣ 개발 지식 B+/OS

[네트워크] echo 예제로 이해하는 소켓 인터페이스

by ddubbu 2024. 9. 16.

 

소켓통신 파일 처리와 같다?

  • 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

 

 

결과물

'2️⃣ 개발 지식 B+ > OS' 카테고리의 다른 글

[PintOS Project1] THREADS  (1) 2024.10.08
어셈블리어 기초  (1) 2024.10.02
[C] 문법 빠르게 훑기  (0) 2024.08.27
[우분투 20.04] 인코딩 utf-8  (0) 2021.03.30
[우분투 20.04] 듀얼 모니터 설정  (0) 2021.02.07