1. 소켓이란?

 - 소켓은 원래 유닉스에서 사용한 네트워크 프로그래밍 인터페이스 인데 요고를 윈도우에서 사용 가능하게 만들어준 것을 윈도우 소켓이라구 부른다, 윈도우 95버전부터 API에 정식으로 포함하여 제공하고있다.

 

2. 소켓의 특징.

 - 윈도우 소켓은 유닉스 소켓을 기반으로 한 네트워크 프로그래밍 인터페이스이므로, 소스코드수준에서 비교적 호환성이 높다잉, 그런데 아무래도 그 뿌리가 유닉스다보니까 다른 부분도 존재한다.

  * 윈도우 소켓은 DLL을 통해 대부분의 기능이 제공되므로 DLL 초기화와 종료작업을 위한 함수가 필요하다.

  * 윈도우 애플리케이션은 대게 그래픽 사용자 인터페이스를 기반으로하여 메시지 구동 방식으로 동작하므로 이를 위한 확장함수가 필요하다.

  * 윈도우는 운영체제 차원에서 멀티스레드를 지원하므로, 멀티스레드 환경에서 안정적으로 동작하기 위한 구조와 이를 위한 함수가 필요하다



 

3. WSAStartup

 - 얘는 WS2_32.DLL을 사용할 수 있도록 초기화 하는데 사용하는 함수이다.

 - 구조

   int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );

 - 파라미터

   WORD wVersionRequested

   : 소켓함수가 사용할 가장 높은 버전, 2Byte의 상위바이트는 minor, 하위바이트는 major

   LPWSADATA lpWSAData

   : 윈도우즈 소켓 시스템 관련 정보를 반환할 WSADATA 구조체의 포인터

   성공적으로 수행한 경우 0 리턴, 아니면 에러코드,,

 

4. WSACleanup

  - 얘는 WS2_32.DLL을 종료

  - 구조

    int WSACleanup(void);

  - 얘가 사용되기 전에 WSAStartup함수의 성공적인 수행이 있어야함, WSAStartup함수로 윈속을 초기화하고 윈도우즈 소켓을 다 쓰고나서 사용한 소켓 리소스를 반환할 때 쓰는거니까 당연! 윈도우즈 소켓 사용후에 더이상 소켓 자원이 필요 없을 때, 호출되어야 한다는거~

    이게 수행될 때, 블록킹 상태에 있는 처리나, 비동기작업은 통지 메세지나 이벤트 포스팅 작업 없이 바로취소, 그니까 완벽한 작업을 끝마치지 못한 상태에서 중지되는 것!

    이럴 때는 연산실패에 에러코드 작렬

   : 성공할 경우 0 리턴, 에러나면 소켓에러코드,,

 

5. 간단한 코드 예제

#include <Winsock2.h>

 

int main()

{

   // 윈속 초기화

   WSADATA wsa;

   if(WSAStartup(MAKEWORD(2, 2), &wsa) != 0)

      return -1;

 

   printf("윈속초기화 성공~");

 

   // 윈속종료

   WSACleanup();

   return 0;

}


'Web, Network Programming > Socket' 카테고리의 다른 글

TCP 서버/클라이언트  (0) 2014.06.16
도메인 네임 서버  (0) 2014.06.16
바이트 정렬  (0) 2014.05.29
Socket 생성  (0) 2014.05.29
initSocketLayer  (0) 2014.05.29
Posted by 긍정왕오킹