-
int send( SOCKET s, const char* buf, int flags );
int recv( SOCKET s, char* buf, int flags );
// 성공시 송수신된 바이트 수, 실패시 SOCKET_ERROR (EOF 전송시 0)
- 옵션
옵션 |
의미 |
send() |
recv() |
MSG_OOB |
긴급 데이터(Out-of-band data)전송 옵션 |
O |
O |
MSG_PEEK |
입력버퍼에 수신된 데이터 존재유부 확인 옵션 |
|
O |
MSG_DONTROUTE |
전송과정에서 Routing 테이블을 참조 안함 요구 Local 네트워크 상에서 목적지 찾을 때 사용 |
O |
|
MSG_DONTWAIT |
입출력 함수 호출 과정에서 블로킹 안됨을 요구 Non-blocking IO의 요구에 사용 |
O |
O |
MSG_WAITALL |
요청한 바이트 수 데이터가 전부 수신될 때까지 호출된 함수가 반환되는 것을 막음 |
|
O |
- MSG_OOB (Out-of-band Data) : 긴급 메시지 전송
> 전혀 다른 통신 경로로 전송되는 데이터, 1바이트만 전송
> TCP의 경우 별도의 통신 경로 제공을 안하고 Urgent mode라는 것을 이용
-> TCP 헤더에 URG와 URG Pointer 존재
URG : 긴급 메시지가 존재하는 패킷임을 알람
URG Pointer : 오프셋에서 보낼 데이터 위치 가리킴
> Urgent Pointer 앞 부분에 위치한 1byte를 제외한 나머지는 일반 입력함수 호출로 읽힘
- 윈도우에는 리눅스에서 보인 시그널링 핸들링이 존재 안함
> MSG_OOB에 대한 이벤트 핸들링이 윈도우 기반에서 불가능
> select() 함수 이용
- 입력 버퍼 검사
> MSG_PEEK : recv() 함수 호출시 입력 버퍼에 존재하는 데이터가 읽혀져도 지워지지 않음
> MSG_DONTWAIT 옵션과 묶여서 블로킹 되지 않고 데이터의 존재유무 확인
- 리눅스의 writev(), readv() 함수는 윈도우에 정의 돼있지 않으며
윈도우에서는 중첩 입출력(Overlapped IO)를 이용함
'programing > Networks' 카테고리의 다른 글
표준 입출력 함수, 입출력 스트림, select()의 문제, 쓰레드 (0) | 2015.05.21 |
---|---|
멀티 캐스트& 브로드 캐스트 (0) | 2015.05.18 |
IO 멀티플렉싱 기반 서버 (0) | 2015.05.15 |
Half-close, DNS, 소켓 옵션 (0) | 2015.05.15 |
UDP 기반 서버 / 클라 (0) | 2015.05.14 |