[Network] 16. 입출력 스트림의 분리에 대한 나머지 이야기

2023. 5. 28. 23:56

 

10장에서는 멀티 프로세스 기반의 스트림 분리에 대해 이야기를 한 적이 있다. 

2023.05.28 - [Computer Science/Network Programming] - [Network] 10. 멀티 프로세스 기반의 서버 구현

 

[Network] 10. 멀티 프로세스 기반의 서버 구현

프로세스의 이해와 활용 다중 접속 서버의 구현 방법들 다중접속 서버 : 둘 이상의 클라이언트에게 동시 접속을 허용하여 동시에 둘 이상의 클라이언트에 서비스를 제공하는 서버를 의미한다.

mobuk.tistory.com

 

15장에서는 FILE 구조체 포인터 기반의 분리에 대해 이야기를 나누었다. 

2023.05.28 - [Computer Science/Network Programming] - [Network] 15. 소켓과 표준입출력

 

[Network] 15. 소켓과 표준입출력

표준 입출력 함수의 장점 표준 입출력 함수의 장점과 단점 1. 이식성이 좋다. 2. 버퍼링(버퍼에 저장했다가 한꺼번에 전송하는 것)을 통한 성능 향상에 도움이 된다. 표준 입출력 함수를 이용해

mobuk.tistory.com

 

10장에서 보인 스트림의 분리는 이번에 보일 스트림의 분리와 방법에 있어 차이점이 있다. 

 

파일 디스크립터의 복사와 Half-close

스트림의 분리 이후 half-close가 진행되지 않는 이유

하나의 소켓을 가지고 입력, 출력 스트림을 분리하였다고 해도, 이 중 하나를 대상으로 종료를 하면 half-close가 발생하는 것이 아닌 완전종료가 일어난다. 

그래서 위의 경우 fgets가 제대로 작동하지 않는다.

그 FILE 포인터는 분리되었어도 file descripter는 하나이기 때문이다.

그럼 파일 디스크립터를 복사해서 FILE 포인터를 만들어 연결시켜두고 하나만 종료시키는건 어떨까?

이렇게 하면 해당 파일 포인터에 연결된 파일 디스크립터만 소멸된다. 

파일 디스크립터의 복사

#include <unistd.h>

int dup(int fildes);
int dup2(int fildes, int filedes2);

두 함수 다 파일 디스크립터를 복사하는 기능을 하며, 두번째 함수는 명시적으로 복사할 파일디스크립터의 위치를 지정할 수 있다. 

위와 같은 방법으로 dup를 이용해 파일 디스크립터를 분리하고, file 구조체 포인터를 각각의 디스크립터에 생성하고 있다. 이렇게 되면, shutdown을 진행했을 때 half-close가 실행되게 된다.

BELATED ARTICLES

more