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.)