2.5.6 send, recv [TCP/IP 소켓 프로그래밍 with 윈도우즈]

연결 상태의 서버와 클라이언트는 상대에게 메시지를 보내거나 수신할 때 send와 recv 함수를 사용합니다.

메시지를 전송하는 함수
int send(SOCKET sock, const char * buf, int len,int flags);
실패 시: -1(SOCKET_ERROR) 반환, 성공 시: 송신한 바이트 수
메시지를 수신하는 함수
int recv(SOCKET sock, char * buf, int len,int flags);
실패 시: -1(SOCKET_ERROR) 반환, 성공 시: 수신한 바이트 수, 0을 받았으면 상대 소켓이 닫힌 것임
flags: 세부적인 전송 및 수신 방법
    MSG_OOB : 메시지 대역을 사용하지 않고 별도의 대역 사용
    MSG_DONTROUTE : 라우터 테이블을 참조하지 않음

send 함수에서는 두 번째 인자로 송신할 데이터가 있는 메모리 주소, 세 번째 인자로 송신할 바이트 수를 전달합니다. 그리고 반환 값으로 실제 송신한 바이트 수를 반환합니다. recv 함수도 send 함수와 입력 인자가 비슷합니다. 단지 수신할 버퍼의 주소라는 것과 수신 요청할 바이트 수라는 점이 다를 뿐입니다.

send와 recv 함수의 네 번째 인자로 특별한 방식의 송수신 플레그를 지정할 수 있는데 특별한 경우에 사용합니다.