소스를 분석하는 중

InitSocketLayer 메서드를 만났다

 

아무래도 소켓 초기화를 해주는 것 같다

 

기본적으로 헤더는 <winsock2.h>

라이브러리는 ws2_32.lib



 

int InitSocketLayer() 
{
 int retval = 0 ;
 // Initialize the winsock environment
 WORD ver_request = MAKEWORD( 2, 2 );
 WSADATA wsa_data;

 // Initialize the winsock environment.
 if ( WSAStartup( ver_request, &wsa_data ) )
 {
  // Failed to startup WinSock
  
return -1;
 }
 // Confirm the winsock environment supports at least version 2.2.
 
long nMajor = LOBYTE( wsa_data.wVersion );
 long nMinor = HIBYTE( wsa_data.wVersion );
 if ( 2 < nMajor )
 {
  // We can't support anything with a major value under 2.  Goodbye.
  retval = -1;
 }
 else if ( 2 == nMajor )
 {
  // Make sure that the minor value is at least 2
  if ( 2 > nMinor )
  {
   retval = -1;
  }
 }
 // All other versions should work.  Let's hope that future versions don't break
 // the application.
 else
 {
  //std::cerr << "The version of winsock is newer than what we expected." << std::endl;
 }
 if ( 0 < retval )
 {
  WSACleanup();
 }

 return retval; 
}

 

요고다

짧다

 

Makeword(2, 2)

WORD 자료형을 만들어주는 메서드

첫번째 인자가 하위(low)바이트, 두번째 인자가 상위(high)바이트

하위바이트 : 메이저버전, 상위바이트 : 마이너버전

 

WSADATA

typedef struct WSAData

{

  WORD             wVersion;

  WORD             wHighVersion;

  char                szDescription[WSADESCRIPTION_LEN+1];

  char                szSystemstatus[WSASYS_STATUS_LEN+1];

  unsigned short iMaxSockets;

  unsigned short iMaxUdpDg;

  char FAR*        lpVendorInfo;

}WSADATA, FAR *LPWSADATA;

이러한 구조로 되어있다.

 

wVersion : 윈도우 소켓버전

wHighVersion : 윈도우 소켓의 가장 높은 버전, 통상적으로 wVersion과 같다

szDescription : 윈도우 소켓 DLL이 관련한 지위 또는 구성정보를 카피하는 NULL로 끝나는 아스키 문자열.

iMaxSockets : 하나의 프로세스가 열 수 있는 최대 소켓의 수

iMaxUdpDg : 데이터그램 프로토콜(UDP)의 최대 바이트 단위

lpVendorInfo : 벤더의 특유 데이터 structure의 far pointer.

 

 

WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

주로 윈속 관련 라이브러리를 초기화 하고 그 데이터를 WSAData에 넣어줄 때 쓰인다

wVersionRequested : 프로그래머가 사용할 윈속의 버전정보 전달

lpWSAData : WSADATA라는 구조체 변수의 주소값 전달

  - 성공시 0, 실패시 0이 아닌 에러코드 반환

 

wVersionRequested에는 주로 MAKEWORD 함수를 넣는데

MAKEWORD(1,2) : 주 버전 1, 부 버전 2, 0x0201리턴

MAKEWORD(2,2) : 주 버전 2, 부 버전 2, 0x0202리턴

 

HIBYTE(WORD) : 상위 2바이트를 뽑아준다

LOBYTE(WORD) : 하위 2바이트를 뽑아준다

HIWORD(WORD) : 이건 상위 4바이트

LOWORD(WORD) : 이건 하위 4바이트

 

WSACleanUp(void)

윈속 라이브러리 해제시 사용

  - 성공시 0, 실패시 SOCKET_ERROR 리턴

 

결국 이 initSocketLayer 메서드는 소켓 초기화 메서드

적어도 소켓 2.2 이상은 돼야하는데 그게 되는지 확인하는 메서드

'Web, Network Programming > Socket' 카테고리의 다른 글

TCP 서버/클라이언트  (0) 2014.06.16
도메인 네임 서버  (0) 2014.06.16
바이트 정렬  (0) 2014.05.29
Socket 생성  (0) 2014.05.29
WS2_32.DLL  (0) 2014.05.29
Posted by 긍정왕오킹