Note 의사 코드와 실제 코드의 차이
여러분 이해를 돕고자 의사 코드 형태로 보여 주었지만, 실제 socket API에서 리턴되는 오류 코드 처리는 다른 모양입니다.
의사 코드에서는 다음과 같이 표현했습니다.
r = socket.send(...); // ➊ if (r = = EWOULDBLOCK) { ... } // ➋
➊ 송신할 데이터를 소켓의 송신 버퍼에 담습니다. 그리고 이 일의 결괏값을 r에 담습니다.
➋ r이 EWOULDBLOCK이라는 오류 코드를 갖고 있으면…….
하지만 실제 코드는 다음과 같습니다.
length = s.send(socket, ...); // ➊ if (length < 0) // ➋ { #ifdef _WIN32 if (WSAGetLastError() = = WSAEWOULDBLOCK) // ➌ ... #else if (errno = = EWOULDBLOCK) // ➌ ... #endif }
➊ 송신할 데이터를 소켓의 송신 버퍼에 담습니다. 송신 버퍼에 잘 담은 데이터의 길이를 r에 담습니다.
➋ 길이가 음수인 경우 송신 버퍼에 담지 못했다는 의미입니다.
➌ 윈도에서는 WSAGetLastError 함수를 얻어 오고, 안드로이드 등 여타 운영체제에서는 변수 errno에서 오류 코드를 얻어 올 수 있습니다.
지저분하죠? 여기서 의사 코드로 표현한 점 양해 바랍니다.