윈도우 소켓
소켓의 생성과 닫기
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 1. 생성 윈속 초기화가 성공했으면 이제 소켓을 생성할 준비가 된 것이다. 소켓을 사용한 통신의 기본 요건은 양 끝단이 모두 같은 프로토콜을 사용하는 것이다. socket() 함수는 사용자가 요청한 프로토콜을 사용해 통신할 수 있도록 내부적으로 리소스를 할당하고, 이에 접근할 수 있는 핸들(SOCKET 타입, 32비트 정수)을 리턴한다. 이를 소켓 디스크립터라 부르며, 각종 소켓 함수의 인자로 전달해 사용한다. // 성공: 새로운 SOCKET(32비트 정수) // 실패: INVALID_SOCKET SOCKET socket { int af, int type, int p..
윈도우 소켓 애플리케이션 초기화 및 종료
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 1. 초기화 모든 윈도우 소켓 애플리케이션은 다음과 같은 구조를 가진다. 소켓 초기화 -> 소켓 생성 -> 네트워크 통신 -> 소켓 닫기 -> 소켓 종료 따라서 모든 윈도우 소켓 함수를 호출하기 전에 반드시 윈속 초기화 함수인 WSAStartup() 함수를 호출해야 한다. 이 함수는 프로그램에서 사용할 윈속 버전을 요청함으로써 윈속 라이브러리(WS2_32.DLL)를 초기화하는 역할을 한다. WSAStartup() 함수가 실패할 경우 WS2_32.DLL이 메모리에 로드되지 않는데, 이 경우에는 WSAGetLastError 함수에서 정확한 오류 코드를 리턴하지 않는다. ..
일반적인 윈도우 소켓 함수의 오류 처리
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 네트워크 프로그램은 여러 원인 때문에 오류가 발생할 수 있으며, 발생 확률도 비교적 높다. 따라서 함수 호출 시 오류를 체크하고 사용자에게 구체적인 오류 내용을 알려주는 것이 매우 중요하다. 윈도우 소켓 함수는 오류 처리 방법에 따라 다음과 같이 세 가지 유형으로 나눌 수 있다. 오류를 처리할 필요가 없는 경우: 리턴 값이 없거나 호출 시 항상 성공하는 일부 소켓 함수가 여기에 해당된다. 리턴 값만으로 오류를 처리하는 경우: WSAStartup() 함수 리턴 값으로 오류 발생을 확인하고, 구체적인 내용은 오류 코드로 확인하는 경우: 대부분의 소켓 함수가 여기에 해당된..