16. 입력과 출력 스트림의 완벽 분리 TCP/IP 소켓 프로그래밍

16-1. 스트림의 분리

- 무엇을 의미하는 것인가?
    : 입력을 위한 파일 포인터와 출력을 위한 파일 포인터를 독립적으로 유지
- 왜? 스트림을 분리 시키는가?
    :프로그래밍을 단순하게 해 준다.
    : 입 출력 겸용 스트림의 경우 입 출력 작업 전환시 버퍼를 비워야 한다.
    : 일반적인 프로그래밍 방식이다.
- 주의 해야 할 사항은 무엇인가?
    : EOF 전송을 위해서 출력 스트림 종료 시(출력용 FILE*를 가지고 fclose) 입력 출력 스트림 완전 종료가 발생 할 수 있다.
- 왜 종료가 되나?
    : 일반적으로 생각할 때 입력이든 출력이든 어느 한쪽의 파일 스트림을 종료하게 되버리면 다른 한쪽은 남아있어야 하지만,
    : 독립된 스트림이 아닌 하나의 스트림을 가지고 입 출력을 같이 쓰기 때문에 발생하는 문제이다.


16-2. 파일 디스크립터의 복사와 스트림의 분리

- 파일 디스크럽터 복사란?
    : 하나의 파일(혹은 소켓)에 접근 할 수 있는 파일 디스크립터를 하나 더 만들어 내는 것
- 이 복사된 파일 디스크립터를 가지고 입력과 출력 스트림을 각각 분리해서 쓰게 된다.


15. 소켓의 표준 입 출력 TCP/IP 소켓 프로그래밍

15-1. 표준 입 출력 함수의 장점

- 이식성(Portability)이 좋아진다.
    : 모든 시스템은 ANSI 표준 C를 지원한다.
- 효율성을 높일 수 있다.
    : 표준 입출력 함수에 의한 버퍼를 제공받는다.
    : 소켓 생성시 제공되는 버퍼는 프로토콜의 완성을 위한 것이다.
    : 표준 입출력 함수 사용 시 제공되는 버퍼는 성능 향상을 위한 것이다.

15-2. 표준 입 출력 함수의 사용

- 함수 사용의 일반적인 순서
    : 파일 디스크립터를 FILE 구조체 포인터로 반환
    : 표준 입출력 함수의 호출
    : 함수 호출 후 fflush 함수호출을 통해서 버퍼 비움


14. 멀티캐스트 & 브로드캐스트 TCP/IP 소켓 프로그래밍

14-1. 멀티캐스트

- 멀티캐스트 서버는 특정 멀티캐스트 그룹을 대상으로 데이터를 딱 한번 전송한다.
- 딱 한번 전송하더라도 그룹에 속하는 클라이언트는 모두 데이터를 수신한다.
- 멀티캐스트 그룹의 수는 IP 주소 범위 내에서 얼마든지 추가가 가능하다.
- 특정 멀티캐스트 그루으로 전송되는 데이터를 수신하려면 해당 그룹에 가입하면 된다.
- TTL (Time to Live)
    : 패킷을 얼마나 멀리 보낼 것인가를 결정하는 요소
    : TTL은 거쳐 갈 수 있는 라우터를 수를 의미
    : TTL이 0이 되면 해당 패킷은 소멸

14-2. 브로드캐스트
- UDP를 기반으로 하는 전송 방식 (멀티캐스트와 같다).

- 일반적인 UDP 패킷과의 차이점은 전송 목적지 IP주소 뿐이다.

- 동일 네트워크에 속하는 모든 호스트에 동시 전송 (멀티캐스트와의 차이점).

- 인터넷상에서는 지역 네트워크내에서만 브로드캐스트를 허용한다 (네트워크의 부하를 고려).


13. recv & send 입 출력 함수 TCP/IP 소켓 프로그래밍

13-1. revc & send 입 출력 함수

- read & write 함수와 달리 데이터 입 출력 방법에 있어서 옵션 부여


13-2. readv & writev 입 출력 함수



12. I/O 멀티플렉싱 TCP/IP 소켓 프로그래밍

12-1. I/O 멀티플렉싱

- 멀티플렉싱이란?
    : 하나의 전송로를 여러 사용자가 동시에 사용해서 효율성을 극대화 하는 것
- 멀티 프로세스 서버의 단점
    :프로세스의 빈번한 생성은 성능의 저하로 이어진다.
    : 멀티 프로세스의 흐름을 고려해서 구현해야 하기 때문에 구현이 쉽지 않다.
    : 프로세스간 통신이 필요한 상황에서는 서버의 구현이 더 복잡해진다.
- 멀티 프로세스 서버의 대안
    : 하나의 프로세스가 다수의 클라이언트에게 서비스를 할 수 있도록 한다.
    : 이를 위해서는 하나의 프로세스가 여러 개의 소켓을 핸들링 할 수 있는 방법이 존재해야 한다.
    : 바로 이것이 IO 멀티플렉싱이다.

12-2. select 함수 사용하기


1 2 3 4