윈도우즈에서 소켓 프로그래밍에서 제일 먼저 호출 하게 되는것이 WSAStartup 함수이다.
이 함수는 UNIX 소켓 프로그램에는 없는것으로 WSACleanup 함수와 쌍을 이뤄 소켓 프로그램의
시작과 끝을 나타낸다. 이 함수가 하는 일은 윈속 동적 연결 라이브러리를 초기화하고
윈속 구현이 애플리케이션 요구사항을 충족하는지 확인한다.
프로토 타입은 다음과 같다.
int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);
wVersionRequired : 애플리케이션이 사용할 수 있는 WindSock API의 최상위 버전
상위 바이트가 마이너 버전, 하위 바이트가 메이저 버전
lpWSAData : WSADATA 타입의 구조체에 대한 포인터이다.
사용예는 다음과 같다.
#include <iostream>
#include <winsock2.h>
using std::cout;
using std::endl;
int main()
{
WORD wVersionRequested = MAKEWORD(2, 2); // WinSock 2.2 요청
WSADATA wsaData;
int nErrorStatus;
nErrorStatus = WSAStartup(wVersionRequested, &wsaData);
if(nErrorStatus != 0)
{
cout << "WSAStartup 실패..." << endl;
return 0;
}
// WinSock 버전 정보 체크
if((LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested)) ||
(HIBYTE(wsaData.wVersion) != HIBYTE(wVersionRequested)))
{
cout << "지원되지 않는 버전이다." << endl;
}
cout << "버전 : "
<< static_cast<int>LOBYTE(wsaData.wVersion) << "."
<< static_cast<int>HIBYTE(wsaData.wVersion) << endl;
WSACleanup(); // WinSock의 사용을 마친다.
return 0;
}
빌드는 Visual Studio 2008 에서 Win32 콘솔 응용프로그램 템플릿에서
빈프로젝트를 선택한다음 cpp 파일을 추가해서 작성한다.
그냥 빌드하면 링크시에 다음과 같은 오류가 발생한다.
1>링크하고 있습니다...
1>WSAStartupTest.obj : error LNK2019: __imp__WSACleanup@0 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>WSAStartupTest.obj : error LNK2019: __imp__WSAStartup@8 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>D:\vs2008\cpp\WinSock\Debug\WSAStartupTest.exe : fatal error LNK1120: 2개의 확인할 수 없는 외부 참조입니다.
ws2_32.lib를 찾지 못하기 때문이다. 프로젝트 속성에 다음을 추가하여 빌드한다.
[출처] [VC++] WSAStartup 함수 - WinSock 프로그래밍|작성자 미니
'소프트웨어개발' 카테고리의 다른 글
[UNIX] Socket FAQ (0) | 2016.01.05 |
---|---|
[ Linux/C/C++] df명령, FileSystem 용량 (0) | 2016.01.05 |
[ C ] 전처리문 (#define, #if, #ifdef, #ifndef, #defined, .. ) (0) | 2016.01.05 |
[ C ] 소스 IPC_spectrum.c (0) | 2014.08.23 |
Praat (0) | 2014.08.23 |
댓글