블로킹 소켓 ( Blocking Socket )
- 블로킹 소켓은 소켓 함수를 호출했을 때 현재 수행할 수 없다면 수행할 수 있을 때 까지 block 되는 소켓을 말합니다.
넌블로킹 소켓 ( Nonblocking Socket )
- 넌블로킹 소켓은 소켓 함수를 호출했을 때 현재 수행할 수 없다면 블락되지 않고 error를 return 하는 소켓을 말합니다.
블로킹 소켓과 넌블로킹 소켓 함수의 차이
accept()
블로킹 소켓
- 현재 백로그 큐 ( Backlog Queue ) 에 연결 정보가 없다면 연결 정보가 Enqeue 될 때 까지 블락됩니다.
넌블로킹 소켓
- 현재 백로그 큐 ( Backlog Queue ) 에 연결 정보가 없다면 INVALID_SOCKET 을 return 하며 WSAGetLastError(); 를 호출할 경우 WSAEWOULDBLOCK 이 return 됩니다.
connect()
블로킹 소켓
- SYN 패킷을 보낸 후 상대방으로부터 응답이 올 경우 return 됩니다.
넌블로킹 소켓
- SYN 패킷을 보낸 직후 바로 SOCKET_ERROR를 return 하며 WSAGetLastError(); 를 호출할 경우 WSAEWOULDBLOCK 을 return 합니다.
send()
블로킹 소켓
- 소켓 송신 버퍼의 남은 공간이 송신하려는 데이터 크기보다 부족할 경우 소켓 송신 버퍼의 공간이 확보될 때 까지 블락됩니다.
넌블로킹 소켓
- 소켓 송신 버퍼의 남은 공간이 송신하려는 데이터 크기보다 부족할 경우 남은 공간만큼 복사 후 소켓 송신 버퍼에 복사한 크기만큼 정수 형태로 return 합니다.
recv()
블로킹 소켓
- 소켓 수신 버퍼의 수신된 데이터가 1byte 라도 없으면 소켓 수신 버퍼에 수신 데이터가 복사될 때 까지 블락됩니다.
넌블로킹 소켓
- 소켓 수신 버퍼의 수신된 데이터가 1byte 라도 없으면 SOCKET_ERROR 를 return 하고 WSAGetLastError(); 를 호출했을 때 WSAEWOULDBLOCK 을 return 합니다.
'네트워크' 카테고리의 다른 글
TCP의 3-way-handshake와 4-way-handshake란? (0) | 2023.02.15 |
---|---|
ARP, RARP, ARP Spoofing 이란? (0) | 2023.02.14 |
DNS( Domain Name System ) 이란? (0) | 2023.01.28 |
STMP, POP3, IMAP 이란? (0) | 2022.12.06 |
네트워크 계층 구조란? with [ OSI 7계층, TCP/IP 4계층 ] (0) | 2022.09.23 |