출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201)
1. 초기화
모든 윈도우 소켓 애플리케이션은 다음과 같은 구조를 가진다.
소켓 초기화 -> 소켓 생성 -> 네트워크 통신 -> 소켓 닫기 -> 소켓 종료
따라서 모든 윈도우 소켓 함수를 호출하기 전에 반드시 윈속 초기화 함수인 WSAStartup()
함수를 호출해야 한다. 이 함수는 프로그램에서 사용할 윈속 버전을 요청함으로써 윈속 라이브러리(WS2_32.DLL
)를 초기화하는 역할을 한다.
WSAStartup()
함수가 실패할 경우 WS2_32.DLL
이 메모리에 로드되지 않는데, 이 경우에는 WSAGetLastError
함수에서 정확한 오류 코드를 리턴하지 않는다. 따라서 WSAStartup
함수는 직접 오류 코드를 리턴하여 실패 여부를 확인할 수 있게 만들었다.(성공 0, 실패 전용 오류 코드 반환)
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
wVersionRequested
: 프로그램이 요구하는 최상위 윈속 버전. 하위 8비트에 주 버전, 상위 8비트에 부 버전을 넣어서 전달한다.- 윈속 2.2 버전 사용을 요청한다면
MAKEWORD(2, 2)
를 사용한다.
- 윈속 2.2 버전 사용을 요청한다면
lpWSAData
: WSADATA 구조체를 전달하면 이를 통해 윈도우 운영체제가 제공하는 윈속 구현에 관한 정보를 얻을 수 있다.
// 윈속 초기화
WSADATA wsa;
// 2.2 버전 요구, wsa에 윈속 구현 정보 받아옴
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
return 1;
2. 종료
프로그램을 종료할 때에는 종료 함수인 WSACleanup()
함수를 호출해야 한다. 해당 함수는 윈속 사용을 중지함을 운영체제에게 알리고, 관련 리소스를 반환하는 역할을 한다.
함수 호출이 실패하면 WSAGetLastError
함수를 통해 구체적인 오류를 얻을 수 있다.(성공 0, 실패 SOCKET_ERROR
)
int WSACleanup();
'네트워크 > 윈도우 소켓 프로그래밍' 카테고리의 다른 글
TCP 클라이언트 함수 (0) | 2024.04.05 |
---|---|
TCP 서버 함수 (0) | 2024.04.05 |
소켓 주소 구조체 다루기 (0) | 2024.04.04 |
소켓의 생성과 닫기 (0) | 2024.04.01 |
일반적인 윈도우 소켓 함수의 오류 처리 (0) | 2024.04.01 |