반응형
- 입출력 루틴 분할의 의미와 이점
- 에코 클라이언트의 경우 하나의 프로세스 안에서 read, write함수를 반복하는 구조이므로 데이터를 송신하면 수신이 완료될때까지 기다려야 했다.
- 입출력 루틴 분할: 데이터의 송신과 수신을 둘 이상의 프로세스로 분할
- 부모 프로세스: 수신
- 자식 프로세스: 송신
- 송신, 수신을 하는 프로세스가 다르므로 데이터의 수신여부와 관계없이 데이터를 전송할 수 있다.
- 이점: 프로그램의 구현이 수월해짐 (부모 프로세스는 수신관련 코드, 자식 프로세스는 송신관련 코드)
- : 데이터의 수신여부에 상관없이 데이터 전송이 가능하므로 연속된 데이터의 전송이 가능해 데이터의 전송속도가 느린 환경에서 송수신 분량이 더 많음
- 에코 클라이언트의 입출력 루틴 분할
- 단, 입출력 루틴 분할된 에코 클라이언트 프로그램의 경우, 수신의 여부와 관계없이 송신이 가능하므로 에코된 메시지의 형태가 잘 보여지도록 printf("input message: "); 문은 제외시킴
- 수신을 담당하는 부모 프로세스에서 좀비 프로세스가 생성되지 않도록 waitpid 함수를 호출시켜 자식 프로세스를 소멸시킴
//실행창
◆ 입출력 분리 분할 이후의 EOF 전달
- file descriptor가 종료되면 EOF가 전달
- file descriptor를 완전히 종료하지 않아도 출력 스트림에 대해 종료를 진행하면 EOF가 전달 (shutdown)
- file descriptor가 복사되고 나면 복사된 file descriptor까지 모두 종료돼야 EOF가 전달
- file descriptor가 복사된 상황이라 할지라도 shutdown 함수호출을 통해 Half-close를 진행하면 상대 호스트로 EOF가 전달
→ 따라서 클라이언트의 자식 프로세스에서 shutdown 함수를 사용하여 출력 스트림을 닫음으로써 EOF를 전달하는 것이 정확한 코드 구현
반응형
'프로그래밍의 기초 > TCP | IP' 카테고리의 다른 글
프로세스간 통신의 적용 (0) | 2022.01.21 |
---|---|
프로세스간 통신의 기본 개념 (0) | 2022.01.20 |
멀티태스킹 기반의 다중접속 서버 (0) | 2022.01.19 |
시그널 핸들링 (0) | 2022.01.19 |
프로세스 & 좀비 프로세스 (0) | 2022.01.18 |