#include <afxsock.h>
만들고자하는 App 클래스의 InitInstanceApp() 함수에서
AfxSocketInit();
로 소켓 사용을 초기화 한다
내부적으로는 WSAStartup() 으로 구현되어있으며, 해제시의 WSACleanup() 은 자동 호출된다.
CAsyncSocket은 비동기 소켓(non-blocking)
CSocket은 동기 소켓(blocking)
Win32 API Socket (WSA)
1]. 윈도우즈 소켓을 위한 헤더와 라이브러리 설정
1. Header : 헤더파일 추가
Win32 : winsock.h
Win32-II : winsock2.h
2. Import Library : winsock2.h 헤더파일을 포함하기위해 WS2_32.LIB 라이브러리를
링크시켜야 한다.
Win32 : wsock32.lib
Win32-II : ws2_32.lib VC++ 에서 Alt-F7 프로젝트 속성에서 Link에 추가한다.
2]. 윈속 초기화 하기
WSADATA wsaData; //WinSock을 위한 내부 자료구조
WORD wVersionRequested = MAKEWORD(2, 2);
// WinSock 버전을 위한 부분(WinSock 2.2 를 의미한다,
// MAKEWORD 매크로함수는 winsock2.h에 구현되어 있음)
WSAStartup(wVersionRequested, &wsaData); //WinSock 사용 초기화
3]. 윈속 리소스 해제
WSACleanup();
4]. 참고
BSD계열 API로
socket()
bind()
listen()
connect()
send()
recv()
closesocket()
// close 대신 closesocket()을 사용한다
ioctlsocket()
// ioctl 이나 fcntl 대신 ioctlsocket()을 사용한다(non-Blocking mode로 변경시 주로 사용)
기본적으로 WSA 소켓은 디폴트로 Blocking I/O 모드로 작동하며, ioctlsocket()으로
non-Blocking 모드로 변경이 가능하다
참고 : http://blog.naver.com/agnazz?Redirect=Log&logNo=100018139151