더북(TheBook)

이 코드에는 사용자가 직접 UDPSocket을 만들 수 있는 함수가 없다. UDPSocket의 생성자는 private이다. SocketAddressFactory와 비슷한 패턴으로, 어떤 UDPSocket 객체가 있다면 그 mSocket은 반드시 살아 있는 것이게 된다.7 UDPSocket을 만들려면 코드 3-6의 SocketUtil::CreateUDPSocket() 함수를 호출하여 만드는데, 이 함수는 내부의 소켓 생성 동작이 성공해야만 객체를 리턴해 준다.

코드 3-6 UDPSocket 객체 생성하기

enum SocketAddressFamily
{
    INET = AF_INET,
    INET6 = AF_INET6
};
 
UDPSocketPtr SocketUtil::CreateUDPSocket(SocketAddressFamily inFamily)
{
    SOCKET s = socket(inFamily, SOCK_DGRAM, IPPROTO_UDP);
    if (s != INVALID_SOCKET)
        return UDPSocketPtr(new UDPSocket(s));
 
    ReportError(L"SocketUtil::CreateUDPSocket");
    return nullptr;
}

 


 

7  역주 UDPSocket에 명시적인 Close( ) 함수가 없는 것도 같은 이유이다.

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