소스를 분석하는 중
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 |