hapter 02練習問題-追加関数の紹介
4525 ワード
本書61ページではChapter 02の練習問題を解き、新しいウィンウィン関数をまとめてみました.
関数の定義は次のとおりです.iError:1つの整数
関数の定義は次のとおりです.af:指定アドレス体系 type:コンセントタイプ指定 プロトコル:使用するプロトコルを指定 lpprotocolInfo:生成するソケットの特性を定義するための g:既存コンセントグループIDまたは新規コンセントおよび新規グループを生成する際のルール. 0:パケット化は行わない. SG UNCONTRAID GROUP(0 x 01):無拘束ソケットグループを作成し、新しいソケットを最初のメンバーとして指定します.Winsockは、制限されていないグループについて、ソケットグループ内のすべてのソケットがタイプとプロトコルパラメータと同じ値を作成することを制限しません. SG CONTRAID GROUP(0 x 02):制限付きソケットグループを作成し、新しいソケットを最初のメンバーとして指定します.制限付きソケット・グループの場合、Winsockはソケット・グループ内のすべてのソケットをタイプとプロトコル・パラメータの同じ値に制限します.制限付きソケットグループは、接続を指すソケットのみで構成され、すべてのパケットソケットの接続は、同じホストの同じアドレスにある必要があります.
リファレンス
SG UNCONTRAID GROUPおよびSG CONTRAID GROUP定数は、現在、共通タイトルファイルに定義されていません.
deFlags:他のソケット属性を指定するためのタグ
構造体の定義は次のとおりです.dwServiceFlag 1-5:プロトコルで提供されるサービスのビットマスク.可能な値は dwProviderFlags:Winsockディレクトリでのプロトコルの表示方法をマークします.可能な値は ProviderId:サービスプロバイダベンダーによってベンダーに割り当てられるグローバル一意の識別子.この値は、複数のサービスプロバイダが特定のプロトコルを実装できる場合に便利です.アプリケーションは、ProviderIdメンバーを使用して、区別できないプロバイダを区別できます. プロトコルチェーン:プロトコル関連 iVersion:プロトコルバージョン iAddressシリーズ:プロトコルスロットを開くためのスロットまたは iMaxSockAddr:最大アドレス長(バイト単位) iMinSockAddr:最小アドレス長(バイト単位) iSocketType:プロトコルのソケットを開くソケットまたは iProtocol:プロトコルのスロットを開くためのスロットまたは iProtocol Max Offset:ソケットまたは iNetwordByteOrder:大エディアン(0)または小エディアン(1)の整数を表す iSecurityScheme:使用するセキュリティシステムタイプ dwMessage Size:プロトコルがサポートする最大メッセージサイズ(バイト単位) dwProviderReservice:サービスプロバイダに予約しておく. szプロトコル:読めるプロトコル名を含む文字列.許容される最大文字数は 参考資料
金成祐著、「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
WSASetLastError
WSASetLastError()
関数はwinsock2.h
に存在し、WSAGetLastError()
関数で検索できるエラーコードを設定する関数です.関数の定義は次のとおりです.
void WSASetLastError(
int iError
);
WSAGetLastError()
関数呼び出しで返されるエラーコードを指定WSASocket
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 UNCONTRAID GROUPおよびSG CONTRAID GROUP定数は、現在、共通タイトルファイルに定義されていません.
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;
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
Reference
この問題について(hapter 02練習問題-追加関数の紹介), 我々は、より多くの情報をここで見つけました https://velog.io/@octo__/Chapter02-연습문제-추가-함수-소개テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol