第 4 章 ネットワーク 43
4.5 関数個別説明
1. AbortSocket(TCP)
【機能】
接続を切断(Rst)します。
【書式】
#include "socket.h"
int AbortSocket(
int iSocket );
【パラメータ】
iSocket ソケット記述子を設定します。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
TCPの接続を切断します。
r = AbortSocket(iSock);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
2. AcceptSocket(TCP)
【機能】
待機中のソケットで接続要求を受け付けます。
【書式】
#include "socket.h"
int AcceptSocket(
int iSocket, int iType, NET_ADDR *psAddress );
【パラメータ】
iSocket ソケット記述子を設定します。
iType 接続のタイプを設定します。
iTypeには(STREAM ⏐ TYPE_EXT)を設定してください。
psAddress IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
拡張アドレス情報が格納されます。
(ローカルとリモートのポートとIPアドレス)
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
ノンブロッキングモード時、接続されていない場合は、ERR_WOULD_BLOCKを返します。
【記述例】
TCPの接続要求を受け付けます。
NET_ADDR sNetAddr;
r = AcceptSocket(iListenSock, STREAM ⏐ TYPE_EXT, &sNetAddr);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
3. ConnectSocket(TCP/UDP)
【機能】
指定されたソケットへの接続を確立します。
【書式】
#include "socket.h"
int ConnectSocket(
int iSocket, int iType, NET_ADDR *psAddress );
【パラメータ】
iSocket ソケット記述子を設定します。
iType 接続のタイプを設定します。
STREAM: TCPで接続する。
DATA_GRAM: UDPで接続する。
psAddress IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
UDPで接続します。
NET_ADDR sNetAddr;
r = ConnectSocket(iSock, DATA_GRAM, &sNetAddr);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
} TCPで接続します。
NET_ADDR sNetAddr;
r = ConnectSocket(iSock, STREAM, &sNetAddr);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
4. EofSocket(TCP)
【機能】
接続をクローズ(Fin)します。
【書式】
#include "socket.h"
int EofSocket(
int iSocket );
【パラメータ】
iSocket ソケット記述子を設定します。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
TCPの接続を閉じます。
r = EofSocket(iSock);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
5. FlushSocket(TCP)
【機能】
出力データをフラッシュします。
【書式】
#include "socket.h"
int FlushSocket(
int iSocket );
【パラメータ】
iSocket ソケット記述子を設定します。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
TCPの接続をフラッシュします。
6. GetAddressEx(TCP/UDP)
【機能】
接続中のローカル側IPアドレスを取得します。
【書式】
#include "socket.h"
int GetAddressEx(
int iSocket, NET_ADDR *psAddress );
【パラメータ】
iSocket ソケット記述子を設定します。
psAddress IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
ローカル側IPアドレスを取得します。
NET_ADDR sNetAddr;
r = GetAddressEx(iSock, &sNetAddr);
if (r == 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
7. GetAddressInfo(TCP/UDP)
【機能】
ホスト名からアドレス情報を取得します。
【書式】
#include "socket.h"
int GetAddressInfo(
char *pszName, unsigned uFlags, NET_ADDR *psAddress );
【パラメータ】
pszName ホスト名の文字列へのポインタを設定します。
uFlags アドレス解決のフラグを設定します。
AI_PARSE: ホスト名にIPアドレス(例:“192.168.0.1”)を使用します。
AI_HOSTTAB: ローカルのホストテーブルを使用します。
DNS_IPV4: IPv4のアドレス解決にネームサーバを使用します。
DNS_IPV6: IPv6のアドレス解決にネームサーバを使用します。
DNS_IPV6_FIRST: IPv6のアドレス解決を優先します。
psAddress IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
【戻り値】
正常終了の場合、IPアドレスのサイズ(IPv4の場合は4)を返します。
異常終了の場合、0を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
UDPで接続します。
NET_ADDR sNetAddr;
r = GetAddressInfo("192.168.0.1", AI_PARSE , &sNetAddr);
if (r == 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
8. GetPeerAddressEx(TCP)
【機能】
接続中のリモート側IPアドレスを取得します。
【書式】
#include "socket.h"
int GetPeerAddressEx(
int iSocket, NET_ADDR *psAddress );
【パラメータ】
iSocket ソケット記述子を設定します。
psAddress IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
拡張アドレス情報が格納されます。
(ローカルとリモートのポートとIPアドレス)
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
リモート側IPアドレスを取得します。
NET_ADDR sNetAddr;
r = GetPeerAddressEx(iSock, &sNetAddr);
if (r == 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
9. GetSocket(TCP/UDP)
【機能】
ソケットを作成します。
【書式】
#include "socket.h"
int GetSocket(
void );
【パラメータ】
なし
【戻り値】
正常終了の場合、ソケット記述子(0以上)を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
ソケットを作成します。
NET_ADDR sNetAddr;
iSocket = GetSocket();
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
10. ListenAcceptSocket(TCP)
【機能】
ソケットを受動待機モードにするよう要求します。
【書式】
#include "socket.h"
int ListenAcceptSocket(
int iSocket, int iType, NET_ADDR *psAddress );
【パラメータ】
iSocket ソケット記述子を設定します。
iType 接続のタイプを設定します。
iTypeにはSTREAMを設定してください。
STREAM:TCPの接続要求を受け付けます。
psAddress IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
ソケットをTCPの接続要求待ちの状態に設定します。
NET_ADDR sNetAddr;
r = ListenAcceptSocket(iSock, STREAM, &sNetAddr);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
11. ListenSocket(UDP)
【機能】
ソケットを受動待機モードにします。
【書式】
#include "socket.h"
int ListenSocket(
int iSocket, int iType, NET_ADDR *psAddress );
【パラメータ】
iSocket ソケット記述子を設定します。
iType 接続のタイプを設定します。
iTypeにはDATA_GRAMを設定してください。
DATA_GRAM:UDPの接続を受け付けます。
psAddress IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
ソケットをUDPの受信を受け付ける状態に設定します。
NET_ADDR sNetAddr;
r = ListenSocket(iSock, DATA_GRAM, &sNetAddr);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
12. ReadFromSocket(UDP)
【機能】
データと送信側アドレスを受信します。
【書式】
#include "socket.h"
int ReadFromSocket(
int iSocket, char *pcBuf, unsigned uLen, NET_ADDR *psForm, unsigned uFlags );
【パラメータ】
iSocket ソケット記述子を設定します。
pcBuf データを受け取るバッファへのポインタを設定します
uLen データを受け取るバッファのサイズを設定します。
psForm IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
拡張アドレス情報が格納されます。
(ローカルとリモートのポートとIPアドレス) uFlags オプションフラグの設定を行います。
NET_FLG_PEEK: 待ち状態のデータを受信しますが、ソケット
をキューから削除しません。
NET_FLG_NON_BLOCKING: ノンブロッキングモードに設定します。
NET_FLG_EXT: 拡張アドレス情報を返します。
【戻り値】
正常終了の場合、受信データ長(0以上)を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
ノンブロッキングモード時、受信データがない場合は、ERR_WOULD_BLOCKを返します。
【記述例】
データを受信します。
NET_ADDR sNetAddr;
char cBuff [1024];
r = ReadFromSocket ( iSock, cBuff, 1024, &sNetAddr, NET_FLG_EXT);
if (r < 0){
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
13. ReadSocket(TCP/UDP)
【機能】
接続されているソケットデータを受信します。
【書式】
#include "socket.h"
int ReadSocket(
int iSocket, char *pcBuf, unsigned uLen, NET_ADDR *psFrom, unsigned uFlags );
【パラメータ】
iSocket ソケット記述子を設定します。
pcBuf データを受け取るバッファへのポインタを設定します。
uLen データを受け取るバッファのサイズを設定します。
psFrom IPアドレスを格納するNET_ADDR構造体のポインタを設定します。
拡張アドレス情報が格納されます。
(ローカルとリモートのポートとIPアドレス)
uFlags オプションフラグの設定を行います。
NET_FLG_PEEK: 待ち状態のデータを受信しますが、ソケット
をキューから削除しません。
NET_FLG_NON_BLOCKING: ノンブロッキングモードに設定します。
NET_FLG_EXT: 拡張アドレス情報を返します。
【戻り値】
正常終了の場合、受信データ長(0以上)を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
ノンブロッキングモード時、受信データがない場合は、ERR_WOULD_BLOCKを返します。
【記述例】
データを受信します。
NET_ADDR sNetAddr;
char cBuff [1024];
r = ReadSocket ( iSock, cBuff, 1024, &sNetAddr, NET_FLG_EXT);
if (r < 0){
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
14. ReleaseSocket(TCP/UDP)
【機能】
ソケットを閉じます。
【書式】
#include "socket.h"
int ReleaseSocket(
int iSocket );
【パラメータ】
iSocket ソケット記述子を設定します。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
ソケットを解放します。
r = ReleaseSocket(iSock);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
15. SetSocketOption(TCP/UDP)
【機能】
指定されたソケットオプションの値を設定します。
【書式】
#include "socket.h"
int SetSocketOption(
int iSocket, int iLevel, int iOption,
DWORD dwOptionValue,
int iLen
);
【パラメータ】
iSocket ソケット記述子を設定します。
iLevel オプションの所属するプロトコルレベルを設定します。
iOption データを受け取るバッファのサイズを設定します。
NET_OPT_NON_BLOCKING: ノンブロッキングモードの設定を行い
ます。
ブロッキングモード: dwOptionValue = 00000000h ノンブロッキングモード: dwOptionValue = 00000000h以外
NET_OPT_TIMEOUT: タイムアウトの設定を行います。
タイムアウトなし: dwOptionValue = 00000000h
タイムアウトあり: dwOptionValue = 00000000h以外(ms) dwOptionValue オプションの値を設定します。
iLen オプションのサイズを指定します。
本サイズは4固定です。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
ソケットをノンブロッキングモードに設定します。
r = SetSocketOption(iSock, 0, NET_OPT_NON_BLOCKING, 1, 4);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}
16. WriteSocket(TCP/UDP)
【機能】
接続されているソケットでデータを送信します。
【書式】
#include "socket.h"
int WriteSocket(
int iSocket, char *pcBuf, unsigned uLen, unsigned uFlags );
【パラメータ】
iSocket ソケット記述子を設定します。
pcBuf 送信するデータが入っているバッファへのポインタを設定します。
uLen 送信するデータの長さを設定します。
uFlags オプションフラグの設定を行います。
NET_FLG_NON_BLOCKING: ノンブロッキングモードの設定を行います。
NET_FLG_BROADCAST: ブロードキャストの設定を行います。
【戻り値】
正常終了の場合、0以上を返します。
異常終了の場合、-1を返します。
詳細エラーコードはiNetErrNoに格納されます。
【記述例】
TCP/UDPでデータを返信します。
char rgcWriteBuff [1024];
r = WriteSocket(iSock, rgcWriteBuff, sizeof(rgcWriteBuff), 0);
if (r < 0) {
printf("ERROR: iNetErrNo = %d ¥n", iNetErrNo);
}