Search

WSAStartup(), WSACleanup()

[- Disclaimer -] 아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
WSAStartup()
✦ Winsock 초기화
✦ Parameter1에 전달되는 Argument1
✧ wVersionRequested
→ 프로그램이 요청하는 최상위 Winsock Version Ex) MAKEWORD(3, 2) 또는 0x0203은 Winsock 3.2 사용 요청을 의미
하위 8 bit: Major Version 상위 8 bit: Minor Version
Plain Text
복사
→ Ex) MAKEWORD(3, 2) 또는 0x0203은 Winsock 3.2 사용 요청을 의미
✦ Parameter2에 전달되는 Argument2
✧ lpWSAData
→ WSADATA 구조체 전달 시 OS가 제공하는 Wicsock 구현 정보를 얻음
→ 응용 프로그램이 실제 사용될 Winsock Version, 시스템 제공 Winsock 최상위 Version 등
→ 응용 프로그램이 이 정보를 실제로 사용할 일은 거의 없음
✦ Return 값
✧ 성공
→ 0
✧ 실패
→ Error Code // WSAGetLastError()가 Return하는 Error Code는 부정확해 WSAStartup()에서 직접 Error Code를 Return 가능하게 설계 됨
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
Plain Text
복사
WSACleanup()
✦ Resource를 반환하여 Winsock 종료
✦ Return 값
✧ 성공
→ 0
✧ 실패
→ SOCKET_ERROR // WSAGetLastError()로 Error Code 얻음
Winsock 초기화 및 해제 - Ex)
#pragma comment(lib, "ws2_32") #include <winsock2.h> int main(int argc, char *argv[]) { WSADATA wsa; if(WSAStartup(MAKEWORD(2, 2), &wsa) != 0) return 1; HANDLE hThread[2]; hThread[0] = CreateThread(NULL, 0, TCPServer4, NULL, 0, NULL); hThread[1] = CreateThread(NULL, 0, TCPServer6, NULL, 0, NULL); WaitForMultipleObjects(2, hThread, TRUE, INFINITE); WSACleanup(); return 0; }
Plain Text
복사