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 |