프로그래밍/예전글

WSADATA와 WSAStartup, 그리고 WSACleanup

Cat체셔 2010. 8. 13. 14:54

[윈도우 기반의 서버프로그래밍]

헤더파일
winsock2.h

라이브러리파일
ws2_32.lib

윈도우 기반의 서버프로그래밍에서 서버든 클라이언트든지
저 두가지가 없으면 안됩니다!!!

일단 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
 - 데이터그램 프로토콜의 최대 바이트 단위.
    예를 들어, 버클리 소켓은 8192 바이트의 제한을 사용한다. 최저는 512.

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


이것이 끝인데 솔직히 모르고 있어도 네트워크 프로그래밍 잘만 된다;;




다음으로 알아볼것은 WSAStartup함수
형태는
int 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반환
이렇게 됩니다.

마지막으로 WSACleanup함수입니다.
형태는
int WSACleanup(void); 입니다.
주로 윈속 관련 라이브러리를 해제할 때 사용합니다.

반환값
 - 성공 시 0, 실패 시 SOCKET_ERROR반환


int main()
{
  WSADATA wsaData;
  . . . .
 if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
      Error("WSAStartup() error!");
  . . . .
  WSACleanup();
return 0;
}