C/TCPIP 소켓 프로그래밍(윤성우 저)

TCP/IP 소켓 프로그래밍 13장 내용 확인문제

꾸준함. 2017. 6. 24. 16:42

1. 다음 중, 데이터 전송옵션인 MSB_OOB에 대한 설명 중 맞는 것을 모두 고르면?


>

a. MSG_OOB는 Out-of-band 데이터의 전송을 의미한다. 그리고 이는 다른 경로를 통한 고속의 데이터 전송이라는 의미를 갖는다.


d. MSG_OOB는 TCP의 기본 데이터 전송방식을 벗어나지 못한다. 즉, MSG_OOB는 옵션이 지정되더라도 전송순서는 그대로 유지된다. 다만 이는 수신 측에 데이터 처리의 긴급을 요청하는 용도로 사용될 뿐이다.


*틀린 설명

b. MSG_OOB는 다른 경로를 통한 고속의 데이터 전송이라는 의미를 갖기 때문에, TCP 상에서도 이 옵션을 이용해서 전송된 데이터는 상대 호스트로 먼저 전송된다.

->TCP의 기본 데이터 전송방식에는 다른 경로가 없기 때문에 전송순서는 그대로이다.


c. MSG_OOB 옵션이 주어진 상태에서 상대 호스트로 데이터가 먼저 전송된 이후에는 일반 데이터와 동일한 형태와 순서로 읽혀진다. 즉, 전송이 빠를 뿐, 수신 측에서는 이를 인지하지 못한다.

->전송이 더 빠르지도 않다. MSG_OOB의 목적은 수신측에서 데이터 처리를 최우선으로 요청하는 용도이다.


2. readv&writev 함수를 이용해서 데이터를 송수신 할 경우 어떠한 이점이 있는지 함수 호출의 횟수와 입출력 버퍼의 관점에서 각각 설명해 보자.


>readv&writev 함수는 둘 이상의 공간에 나뉘어 저장되어있는 데이터들을 한번에 모아서 전송하거나 수신할 때 사용되는 함수이다. 이 둘을 이용하면 입출력 버퍼로의 데이터 송수신을 한번에 진행할 수 있기 때문에 보다 효율적인 데이터의 송수신이 가능하다. 그리고 입출력 함수의 호출횟수도 그만큼 줄기 때문에 그로 인한 이점도 생긴다.


3. recv 함수호출을 통해서 입력버퍼의 데이터 존재유무를 확인하고자 할 때(확인 후 바로 반환하고자 할 때), recv 함수의 마지막 전달인자인 데이터 전송의 옵션을 어떻게 구성해야 하는가? 그리고 각각의 옵션이 의미하는 바는 무엇인지도 설명해 보자.


>MSG_PEEK 옵션과 MSG_DONTWAIT 옵션을 같이 사용해야 한다. MSG_PEEK 옵션이 지정되면 입력 버퍼에 존재하는 데이터를 읽어들이되, 읽어들인 데이터를 입력버퍼에서 지우지 않는다. MSG_DONTWAIT 옵션은 입력버퍼가 데이터에 존재하지 않아도 바로 반환하는 기능의 옵션이다.(블로킹 상태 해지)


4. 리눅스에서는 MSB_OOB 데이터의 수신을 이벤트 핸들러의 등록을 통해서 확인이 가능하다. 그렇다면 윈도우에서는 어떻게 MSB_OOB 데이터의 수신을 확인할 수 있는지, 그 방법을 설명해보자.


>MSB_OOB의 데이터 수신은 select 함수의 입장에서 예외적인 데이터의 수신에 해당한다. 따라서 select 함수의 이러한 특성을 활용하면 윈도우 기반의 프로그램에서도 Out-of-band 데이터의 수신을 확인할 수 있다.


[참고] TCP/IP 소켓 프로그래밍 윤성우 저

반응형