더북(TheBook)

Note 의사 코드와 실제 코드의 차이

여러분 이해를 돕고자 의사 코드 형태로 보여 주었지만, 실제 socket API에서 리턴되는 오류 코드 처리는 다른 모양입니다.

의사 코드에서는 다음과 같이 표현했습니다.

r = socket.send(...);   // ➊
if (r = = EWOULDBLOCK)
{
  ...
}                    // ➋

송신할 데이터를 소켓의 송신 버퍼에 담습니다. 그리고 이 일의 결괏값을 r에 담습니다.

rEWOULDBLOCK이라는 오류 코드를 갖고 있으면…….

하지만 실제 코드는 다음과 같습니다.

length = s.send(socket, ...);                  // ➊
if (length < 0)                    // ➋
{
#ifdef _WIN32
  if (WSAGetLastError() = = WSAEWOULDBLOCK)   // ➌
      ...
#else
  if (errno = = EWOULDBLOCK)                  // ➌
  ...
#endif
}

송신할 데이터를 소켓의 송신 버퍼에 담습니다. 송신 버퍼에 잘 담은 데이터의 길이를 r에 담습니다.

길이가 음수인 경우 송신 버퍼에 담지 못했다는 의미입니다.

윈도에서는 WSAGetLastError 함수를 얻어 오고, 안드로이드 등 여타 운영체제에서는 변수 errno에서 오류 코드를 얻어 올 수 있습니다.

지저분하죠? 여기서 의사 코드로 표현한 점 양해 바랍니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.