일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- VB.NET
- 기초
- c#
- 데이터베이스
- 델파이
- 인스톨
- 설치
- MySQL
- Firebird
- Visual Studio 2005
- PostgreSQL
- 파라미터
- dll
- Visual Basic
- 셋업
- SDK
- vb
- Delphi
- SQL
- WIN32 SDK
- 예제
- winsock
- xml
- 문자열
- 초보
- MFC
- 파이어버드
- 입문
- 시리얼 통신
- 소니
- Today
- Total
프로그래밍 노트
[winsock 초보 프로그래밍] 02 윈속 초기화 본문
-----------------------------------------------------------------------
윈속의 초기화
윈속의 초기화화 종료 처리
WSAStartup, WSACleanup
윈속의 기능을 이용하기 전에는 반드시 윈속의 초기화를 해야된다.
윈속의 초기화는 WSAStartup()으로 한다.
WSAStartup()은 처음에 한번만 호출하면된다.
윈속의 기능을 종료할때는 WSACleanup()으로 한다.
WSACleanup은 일반적으로 프로그램의 마지막이나 종료처리에서 실행된다.
======================================================================
#include <winsock2.h>
int main()
{
int nRet;
// 윈속 초기화 정보 구조체
WSADATA wsaData;
// 윈속 초기화
nRet = WSAStartup(MAKEWORD(2,0), &wsaData);
// 윈속 제거
WSACleanup();
return 0;
}
======================================================================
WSAStartup()은 두개의 인수가 있다.
첫번때 인수는 윈속의 버전을 지정한다.
위 소스에는 2.0을 쓰고 있다.
MAKEWORD는 2개의 인수를 WORD로 pack하는 매크로이다.
WORD는 16비트의 부호가 없는 변수로 WSAStartup()에서는 WORD의 16비트에서 상위 8비트에 Major번호 하위 8비트에 Minor번호를 넣어 넘겨주어야 한다.
WSAStartup()의 두번째 인수는 WSAStartup()이 초기화된 상태를 저장하는 변수를 넘겨준다.
WSAStartup()은 윈속을 초기화하고 초기화한 상태를 WSADATA구조체에 저장한다.
======================================================================
에러처리
WSAStartup()으로 초기화가 안될 때도 있다.
그러면 히루 윈속의 기능을 쓸수가 없기 때문에 WSAStartup()의 에러 처리는 매우 중요하다.
WSAStartup()이 성공하면 0을 반환한다.
이외의 값이 돌아올때는 초기화에 실패한 것이다.
======================================================================
#include <stdio.h>
#include <winsock2.h>
int main()
{
int nRet;
// 윈속 초기화 정보 구조체
WSADATA wsaData;
// 윈속 초기화
nRet = WSAStartup(MAKEWORD(2,0), &wsaData);
if(nRet != 0)
{
switch(nRet)
{
case WSASYSNOTREADY:
printf("네트워크 접속을 준비 못함\");
break;
case WSAVERNOTSUPPORTED:
printf("요구한 윈속 버전이 서포트 안됨\");
break;
case WSAEINPROGRESS:
printf("블로킹 조작이 실행중\");
break;
case WSAEPROCLIM:
printf("최대 윈속 프로세스 처리수 초과\");
break;
case WSAEFAULT:
printf("두번째 인수의 포인터가 무효\");
break;
}
}
// 윈속 제거
WSACleanup();
return 0;
}
======================================================================
에러의 각 의미는 이하와 같다.
에러코드 | |
---|---|
WSASYSNOTREADY | 네트워크 서브 시스템이 네트워크에 접속을 준비할 수 없음 |
WSAVERNOTSUPPORTED | 요구한 윈속의 버전이 서포트 안됨 |
WSAEINPROGRESS | 블로킹 윈도우 소켓이 실행중 |
WSAEPROCLIM | 동시에 실행 가능한 최대 윈속수에 달했음 |
WSAEFAULT | lpWSAData가 무효한 포인터임 |
에러의 내용은 그리 안중요할찌 모르지만 WSAStartup()이 문제없이 초기화되었는지는 반드시 확인해야된다.