본문 바로가기

전체 글174

Chapter 15 - 소켓과 표준 입출력 15-1 : 표준 입출력 함수의 장점 표준 입출력 함수는 이식성(Portability)이 뛰어나며 버퍼링을 통한 성능 향상에 도움이 됨 표준 입출력 함수를 사용시 소켓의 입출력 버퍼와는 별도의 추가적인 입출력 버퍼가 제공됨 따라서 표준 입출력 함수 버퍼에 데이터가 먼저 전달되고, 이 데이터가 소켓의 출력버퍼로 이동된 후 마지막으로 상대방에게 전송됨 전송해야할 데이터의 양이 많을수록 버퍼링의 유무에 따른 성능차가 발생함 이는 데이터 전송 패킷에 헤더정보가 들어가기 때문 즉, 버퍼링으로 한번에 전송하는 데이터의 양을 늘려 출력버퍼로의 데이터 이동 횟수를 줄이는 것이 효율적임 시스템 함수를 이용한 파일복사 프로그램 예시 // syscpy.cpp #include #include #include #define B.. 2023. 2. 24.
Chapter 14 - 멀티캐스트 & 브로드캐스트 14-1 : 멀티캐스트(Multicast) 멀티캐스트 방식 데이터전송은 UDP 기반 단, 하나의 목적지를 두었던 UDP에서와 달리 멀티캐스트에서의 데이터 전송은 특정 그룹에 가입되어있는 다수의 호스트가 됨 멀티캐스트 그룹 : 클래스 D에 속하는 IP주소(224.0.0.0 - 239.255.255.255) 멀티캐스트 서버는 특정 멀티캐스트 그룹을 대상으로 데이터를 딱 한번 전송 한번의 전송으로 그룹에 속하는 모든 클라이언트가 데이터를 수신 멀티캐스트 그룹의 수는 IP주소 내에서 추가 가능 특정 멀티캐스트 그룹으로 전송되는 데이터를 수신하기 위해서는 해당 그룹에 가입 멀티캐스트 패킷은 형태가 UDP 패킷과 동일 라우터들이 네트워크상에 띄워놓아진 하나의 패킷을 복사하여 다수의 호스트에 전달 따라서 하나의 영역.. 2023. 2. 24.
Chapter 13 - 다양한 입출력 함수들 13-1 : send & recv 입출력 함수 리눅스에도 send(), recv() 함수가 존재함 #include ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); // 성공시 전송된 바이트 수, 실패시 -1 반환 ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags); // 성공시 수신한 바이트 수(단, EOF 전송시 0), 실패시 -1 반환 윈도우의 send(), recv() 함수와 자료형 이름 외에는 차이가 없음 send(), recv() 함수 모두 마지막 매개변수로 데이터 송수신시 적용할 옵션정보가 전달됨 옵션정보는 비트로 사용되기 때문에 비트 OR 연산자를 이용해 둘 .. 2023. 2. 24.
Chapter 12 - IO 멀티플렉싱(Multiplexing) 12-1 : IO 멀티플렉싱 기반의 서버 프로세스의 생성에는 많은 연산 및 메모리가 필요함 또한 별도의 메모리를 점유하기 때문에 상호간의 데이터 전송에 불편 멀티플렉싱 : 하나의 통신채널을 통해 둘 이상의 데이터를 전송하는데 사용되는 기술 서버에 멀티플렉싱 기술을 도입하여 필요한 프로세스의 수를 줄일 수 있음 12-2 : select 함수의 이해와 서버의 구현 select() 함수를 사용하여 멀티플렉싱 서버를 구현할 수 있음 여러개의 파일 디스크립터를 동시에 관찰 가능 정확히는 소켓의 관찰항목인 이벤트(event)를 관찰 수신한 데이터를 지니고 있는 소켓의 존재여부 블로킹되지 않고 데이터의 전송이 가능한 소켓 탐색 예외상황이 발생한 소켓 탐색 파일 디스크립터 설정 관찰하고자 하는 파일 디스크립터들을 이벤.. 2023. 2. 24.