hapter02 연습문제 - 추가 함수 소개
책 61페이지에 존재하는 Chapter02의 연습문제를 풀이하며 알게된 새로운 윈속 함수를 정리하려고 한다.
WSASetLastError
WSASetLastError() 함수는 winsock2.h에 존재하며, WSAGetLastError() 함수를 통해 검색할 수 있는 오류 코드를 설정하는 함수이다.
함수는 아래와 같이 정의되어 있다.
void WSASetLastError(
int iError
);
- iError: 추후
WSAGetLastError()함수 호출에 의해 반환될 오류 코드를 지정하는 정수
WSASocket
WSASocket() 함수는 winsock2.h에 존재하며, 특정 전송 서비스 공급자에 바인딩된 소켓을 만드는 함수로 socket() 함수와 유시한 기능을 가지고 있다.
함수는 아래와 같이 정의되어 있다.
// 성공: 새로운 소켓, 실패: INVALID_SOCKET
SOCKET WSASocket(
int af,
int type,
int protocol,
LPWSAPROTOCOL_INFOA lpProtocolInfo,
GROUP g,
DWORD dwFlags
);
- af: 주소 체계 지정
- type: 소켓 타입 지정
- protocol: 사용할 프로토콜 지정
- lpProtocolInfo: 생성할 소켓의 특성을 정의하는
WSAPROTOCOL_INFO구조체에 대한 포인터이다. NULL이 아니면 소켓은WSAPROTOCOL_INFO구조체와 연결된 공급자에 바인딩된다. - g: 기존 소켓 그룹 ID 또는 새로운 소켓 및 새로운 그룹을 생성할 때 규칙이다.
g가 기존 소켓 그룹 ID가 아닌 경우 아래 값들이 가능하다.- 0: 그룹 작업이 수행되지 않는다.
- SG_UNCONSTRAINED_GROUP(0x01): 제약 없는 소켓 그룹을 만들고 새 소켓을 첫 번째 구성원으로 지정한다. 제한되지 않은 그룹의 경우 Winsock은 소켓 그룹의 모든 소켓이 유형 및 프로토콜 매개변수에 대해 동일한 값으로 생성되도록 제한하지 않는다.
- SG_CONSTRAINED_GROUP(0x02): 제한된 소켓 그룹을 만들고 새 소켓이 첫 번째 구성원으로 지정한다. 제한된 소켓 그룹의 경우 Winsock은 소켓 그룹의 모든 소켓이 유형 및 프로토콜 매개변수에 대해 동일한 값으로 생성되도록 제한한다. 제한된 소켓 그룹은 연결 지향 소켓으로만 구성될 수 있으며 그룹화된 모든 소켓의 연결은 동일한 호스트의 동일한 주소에 있어야 한다.
참고
SG_UNCONSTRAINED_GROUP 및 SG_CONSTRAINED_GROUP 상수는 현재 공용 헤더 파일에 정의되어 있지 않다.
- deFlags: 추가적인 소켓 속성을 지정하는 데 사용되는 플래그 지정
WSAPROTOCOL_INFO
WSAPROTOCOL_INFO 구조체는 winsock2.h에 정의되어 있으며, 주어진 프로토콜에 대한 완전한 정보를 저장하거나 검색하는데 사용된다.
구조체는 아래와 같이 정의되어 있다.
typedef struct _WSAPROTOCOL_INFO
{
DWORD dwServiceFlags1;
DWORD dwServiceFlags2;
DWORD dwServiceFlags3;
DWORD dwServiceFlags4;
DWORD dwProviderFlags;
GUID ProviderId;
DWORD dwCatalogEntryId;
WSAPROTOCOLCHAIN ProtocolChain;
int iVersion;
int iAddressFamily;
int iMaxSockAddr;
int iMinSockAddr;
int iSocketType;
int iProtocol;
int iProtocolMaxOffset;
int iNetworkByteOrder;
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
CHAR szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFO, *LPWSAPROTOCOL_INFO;
- dwServiceFlag1 ~ 5: 프로토콜에서 제공하는 서비스를 설벙하는 비트마스크이다. 가능한 값은
winsock2.h에 정의되어 있으며 추가 프로토콜 속정 정의도 가능하다. - dwProviderFlags: 해당 프로토콜이 Winsock 카탈로그에 표시되는 방식에 대한 정보를 제공하는 플래그 집합니다. 가능한 값은
winsock2.h에 정의되어 있다. - ProviderId: 서비스 공급자 공급업체가 공급자에게 할당한 GUID(Globally Unique Identifier)이다. 이 값은 둘 이상의 서비스 공급자가 특정 프로토콜을 구현할 수 있는 경우에 유용하며, 응용 프로그램은 ProviderId 멤버를 사용하여 구별할 수 없는 공급자를 구별할 수 있습니다.
- ProtocolChain: 프로토콜과 연결된
WSAPROTOCOLCHAIN구조체 - iVersion: 프로코톨 버전
- iAddressFamily: 프로토콜에 대한 소켓을 열기 위해 소켓 또는
WSASocket()함수에af매개변수로 전달할 값 - iMaxSockAddr: 최대 주소 길이(바이트 단위)
- iMinSockAddr: 최소 주소 길이(바이트 단위)
- iSocketType: 프로토콜에 대한 소켓을 열기 위해 소켓 또는
WSASocket()함수에type매개변수로 전달할 값 - iProtocol: 프로토콜에 대한 소켓을 열기 위해 소켓 또는
WSASocket()함수에protocol매개변수로 전달할 값 - iProtocolMaxOffset: 소켓 또는
WSASocket()함수에protocol매개변수로 전달할 때iProtocol에 추가될 수 있는 최대값 - iNetwordByteOrder: 빅 에디안(0) 또는 리틀 엔디안(1)을 나타내는 정수
- iSecurityScheme: 사용된 보안 체계 유형
- dwMessageSize: 프로토콜에서 지원하는 최대 메세지 크기(바이트 단위)
- dwProviderReserved: 서비스 제공업체에서 사용하도록 예약되어 있다.
- szProtocol: 사람이 읽을 수 있는 프로토콜 이름이 포함된 문자열. 허용되는 최대 문자수는
WSAPROTOCOL_LEN이며 225자로 정의된다.
참고 자료
김성우 저, "TCP/IP 윈도우 소켓 프로그래밍", 한빛아카데미, 2018
https://docs.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-wsasetlasterror
https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa
https://docs.microsoft.com/en-us/windows/win32/api/winsock2/ns-winsock2-wsaprotocol_infoa
Author And Source
이 문제에 관하여(hapter02 연습문제 - 추가 함수 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@octo__/Chapter02-연습문제-추가-함수-소개저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)