책 61페이지에 존재하는 Chapter02의 연습문제를 풀이하며 알게된 새로운 윈속 함수를 정리하려고 한다.
WSASetLastError()
함수는 winsock2.h
에 존재하며, WSAGetLastError()
함수를 통해 검색할 수 있는 오류 코드를 설정하는 함수이다.
함수는 아래와 같이 정의되어 있다.
void WSASetLastError(
int iError
);
WSAGetLastError()
함수 호출에 의해 반환될 오류 코드를 지정하는 정수WSASocket()
함수는 winsock2.h
에 존재하며, 특정 전송 서비스 공급자에 바인딩된 소켓을 만드는 함수로 socket()
함수와 유시한 기능을 가지고 있다.
함수는 아래와 같이 정의되어 있다.
// 성공: 새로운 소켓, 실패: INVALID_SOCKET
SOCKET WSASocket(
int af,
int type,
int protocol,
LPWSAPROTOCOL_INFOA lpProtocolInfo,
GROUP g,
DWORD dwFlags
);
WSAPROTOCOL_INFO
구조체에 대한 포인터이다. NULL이 아니면 소켓은 WSAPROTOCOL_INFO
구조체와 연결된 공급자에 바인딩된다.g
가 기존 소켓 그룹 ID가 아닌 경우 아래 값들이 가능하다. 참고
SG_UNCONSTRAINED_GROUP 및 SG_CONSTRAINED_GROUP 상수는 현재 공용 헤더 파일에 정의되어 있지 않다.
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;
winsock2.h
에 정의되어 있으며 추가 프로토콜 속정 정의도 가능하다.winsock2.h
에 정의되어 있다.WSAPROTOCOLCHAIN
구조체WSASocket()
함수에 af
매개변수로 전달할 값WSASocket()
함수에 type
매개변수로 전달할 값WSASocket()
함수에 protocol
매개변수로 전달할 값WSASocket()
함수에 protocol
매개변수로 전달할 때 iProtocol
에 추가될 수 있는 최대값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