std.socket
注:Win32 では、ws2_32.lib をリンクしてください
例:
サンプルは dmd/samples/d/listener.d にあります
Authors:
Christopher E. Miller
- class SocketException: object.Exception;
- Socketから創出される例外の基底クラス
- int errorCode;
- プラットフォーム依存のエラーコード
- enum AddressFamily;
- アドレス解決に使う、通信ドメイン
- UNSPEC
- UNIX
- ローカル通信
- INET
- IPv4 インターネット・プロトコル
- IPX
- Novell IPX プロトコル
- APPLETALK
- AppleTalk
- enum SocketType;
- 通信方式
- STREAM
- s順序性と信頼性があり、双方向の、コネクション志向バイト・ストリーム
- DGRAM
- コネクション志向でない、信頼性無し、固定最大長メッセージ。データが失われたり、到着順序が変わったりすることがあり得ます。
- RAW
- 生のネットワーク・プロトコルへのアクセス
- RDM
- 信頼性はあるが、順序は保証しないデータグラム
- SEQPACKET
- 順序性と信頼性があり、固定最大長メッセージのデータグラム方式
- enum ProtocolType;
- プロトコル
- IP
- internet protocol version 4
- ICMP
- internet control message protocol
- IGMP
- internet group management protocol
- GGP
- gateway to gateway protocol
- TCP
- transmission control protocol
- PUP
- PARC universal packet protocol
- UDP
- user datagram protocol
- IDP
- Xerox NS protocol
- IPV6
- internet protocol version 6
- class Protocol;
- Protocol はプロトコル情報の取得のためのクラスです。
- ProtocolType type;
string name;
string[] aliases; - これらのメンバは、以下のメソッドの呼び出しが成功したあとに使用可能になります:
- bool getProtocolByName(string name);
- 失敗時にはfalseを返します
- bool getProtocolByType(ProtocolType type);
- 失敗時にはfalseを返します
- ProtocolType type;
- class Service;
- Service はサービス情報の取得のためのクラスです。
- string name;
string[] aliases;
ushort port;
string protocolName; - これらのメンバは、以下のメソッドの呼び出しが成功したあとに使用可能になります:
- bool getServiceByName(string name, string protocolName);
bool getServiceByName(string name);
bool getServiceByPort(ushort port, string protocolName);
bool getServiceByPort(ushort port); - プロトコル名を省略すると、任意のプロトコルがマッチします。
Returns:
失敗時にはfalseを返します。
- string name;
- class HostException: object.Exception;
- InternetHost から投げられる例外の基底です
- int errorCode;
- プラットフォーム依存のエラーコード
- class InternetHost;
- InternetHost は IPv4 アドレスを解決するためのクラスです
- string name;
string[] aliases;
uint[] addrList; - これらのメンバは、以下のいずれかの関数の呼び出しが成功したらデータが入ります:
- bool getHostByName(string name);
- ホスト名の解決。解決できなければfalseを返します。
- bool getHostByAddr(uint addr);
- IPv4 アドレス番号の解決。できなければfalseを返します。
- bool getHostByAddr(string addr);
- 一個上と同様ですが、
IPv4 アドレスはドット区切り十進整数形式
a.b.c.d で表現します。解決できなければfalseを返します。
- string name;
- class AddressException: object.Exception;
- Address から送出される例外の基底クラス
- class Address;
- Address はネットワークアドレスを表す抽象クラスです。
- AddressFamily addressFamily();
- このアドレスのプロトコル・ファミリ
- string toString();
- このアドレスの、人間に読める文字列表現
- class UnknownAddress: std.socket.Address;
- class InternetAddress: std.socket.Address;
- InternetAddress は、IPv4 (Internet Protocol
version 4) のアドレスとポート番号を表すクラスです。
- const uint ADDR_ANY;
- 任意の IPv4アドレス番号
- const uint ADDR_NONE;
- 無効IPv4アドレス番号
- const ushort PORT_ANY;
- 任意の IPv4ポート番号
- AddressFamily addressFamily();
- AddressFamily.INET を返すようにオーバーロードされています。
- ushort port();
- IPv4 ポート番号を返します
- uint addr();
- IPv4 アドレス番号を返します
- this(string addr, ushort port);
- Params:
string addr ドット区切り十進整数形式 a.b.c.d の文字列か、 ホスト名(InternetHostオブジェクトを 使って解決されます) ushort port 下にあるように、PORT_ANY とすることも可能です
- this(uint addr, ushort port);
this(ushort port); - 新しいアドレスを構築します。addr は ADDR_ANY (デフォルト) に、port も
PORT_ANY とすることが可能で、この場合、
実際に接続が張られるまで値が不明と言うことになります。
- string toAddrString();
- IPv4アドレスを、人間に読める、ドット区切り十進整数形式 a.b.c.d の文字列に変換したものです。
- string toPortString();
- IPv4ポート番号を人間に読める文字列に変換したものです。
- string toString();
- IPv4アドレスとポート番号を、a.b.c.d:e 形式の文字列に変換したものです。
- static uint parse(string addr);
- ドット区切り十進整数形式 a.b.c.d
のIPv4アドレス文字列を解析し、数値として返します。
もし文字列が正しいIPv4アドレスでなければ、
ADDR_NONE が返されます。
- class SocketAcceptException: std.socket.SocketException;
- enum SocketShutdown;
- ソケットのシャットダウン方式
- RECEIVE
- このソケットでの受信を無効にする
- SEND
- このソケットでの送信を無効にする
- BOTH
- RECEIVE と SEND の両方
- enum SocketFlags;
- フラグはORで結合もできます:
- NONE
- フラグ指定無し
- OOB
- out-of-bandストリームデータ
- PEEK
- キューから取り除かずに、到着データを覗く
- DONTROUTE
- データは経路制御の対象とすべきでない。このフラグは無視されることがあります。送信専用
- NOSIGNAL
- ソケット書き込みエラー時にSIGPIPEシグナルを送らず、EPIPEを返すようにします。
- struct timeval;
- タイムアウトまでの経過時間を表す値
- int seconds;
- 秒数
- int microseconds;
- 秒数に追加されるミリ秒数
- class SocketSet;
- Socket.select で使うソケット集合を表すクラス
- this(uint max);
- 最大追加可能なソケット数を指定します
- this();
- システムのデフォルトの最大値を使用します
- void reset();
- SocketSet をリセットして、保持ソケットを0個の状態にします
- void add(Socket s);
- ソケットを追加します。最大値を超えて追加しようとすると危険な副作用が起きます
- void remove(Socket s);
- ソケットを取り除きます
- int isSet(Socket s);
- ソケットがこの集合に含まれていれば非0を返します
- uint max();
- FD_SETSIZEのような、追加可能なソケットの最大数です。
- enum SocketOptionLevel;
- ソケットオプションが定義されるレベル:
- SOCKET
- ソケットレベル
- IP
- インターネット・プロトコルv4レベル
- ICMP
- IGMP
- GGP
- TCP
- 転送制御プロトコルレベル
- PUP
- UDP
- ユーザ・データグラム・プロトコルレベル
- IDP
- IPV6
- インターネット・プロトコルv6レベル
- struct linger;
- SocketOption.LINGERで使う、残存待機時間の情報
- ushort on;
- 非0ならば、オンです
- ushort time;
- 残存待機(linger)時間
- enum SocketOption;
- ソケットに関するオプションを指定します
- DEBUG
- デバッグ情報を記録
- BROADCAST
- ブロードキャストメッセージの送信を許可
- REUSEADDR
- アドレスの再利用を許可します
- LINGER
- クローズ時に未送信データがある場合、待機する
- OOBINLINE
- out-of-bandデータを通常データとして受信
- SNDBUF
- 送信バッファサイズ
- RCVBUF
- 受信バッファサイズ
- DONTROUTE
- 経路制御を行わない
- TCP_NODELAY
- 送信一重化のためNagleのアルゴリズムを無効にする
- IPV6_UNICAST_HOPS
- IPV6_MULTICAST_IF
- IPV6_MULTICAST_LOOP
- IPV6_JOIN_GROUP
- IPV6_LEAVE_GROUP
- class Socket;
- Socket Berkeley
のソケットインターフェイスを使ったネットワーク通信の端点を作るクラスです。
- this(AddressFamily af, SocketType type, ProtocolType protocol);
this(AddressFamily af, SocketType type);
this(AddressFamily af, SocketType type, string protocolName); - ブロッキング方式のソケットを作成します。
アドレスファミリ内で指定のソケットタイプをサポートするプロトコルがただ一つしか
存在しない場合は、ProtocolTypeは省略できます。
- socket_t handle();
- 内部で使われているソケットの handle を取得します
- bool blocking();
void blocking(bool byes); - ソケットの blocking フラグを読む/書くプロパティです
ソケットが blocking モードの時は、receive(), accept(), send() の呼び出しはデータの到着やアクションの完了まで待機(ブロック)します。 非blockingソケットは、ブロックせずに即座に制御を戻します。
- AddressFamily addressFamily();
- ソケットのアドレスファミリを取得します
- bool isAlive();
- このソケットが有効で接続中かどうかを示すプロパティ
- void bind(Address addr);
- ローカルアドレスをこのソケットに束縛します
- void connect(Address to);
- 接続を確立します。ソケットがブロッキングモードの場合、
connect は、実際の接続完了まで待機します。
ノンブロッキングモードの場合、connect はすぐに戻り、裏で接続処理を続けます。
- void listen(int backlog);
- コネクション要求の到着を待ちに入ります。
listenの前に、必ずbindを呼んでおく必要があります。
backlog は、accept されるまでの間に要求をためておくキューのサイズです。
- protected Socket accepting();
- 新しいSocketオブジェクトが必要になったときに、acceptによって呼び出されます。
派生クラスで利用するには、このメソッドをオーバーライドして他の派生クラスのインスタンスを返すことになります。
返値の Socket にはハンドルを設定してあってはなりません。この目的のために、Socketクラスには
protectedコンストラクタ this() が用意されています。
- Socket accept();
- 到着したコネクション要求を受け付けます。ソケットがブロッキングモードの場合、
acceptは接続を待機します。acceptに失敗した場合、
SocketAcceptException を送出します。
- void shutdown(SocketShutdown how);
- 送信and/or受信機能を無効にします
- void close();
- ただちに全てのコネクションを落とし、ソケット資源を解放します。
コネクション志向のソケットの場合、close の前には shutdown
を呼んでおくことが推奨されます。close 後には Socket オブジェクトは使用できません。
- static string hostName();
- ローカルマシンのホスト名を得るためのプロパティ。mangoのアイデアです
- Address remoteAddress();
- リモート側の端点のアドレス
- Address localAddress();
- ローカル側の端点のアドレス
- const int ERROR;
- 送受信に関するエラーのコード
- ssize_t send(void[] buf, SocketFlags flags);
ssize_t send(void[] buf); - データを送信します。返値は、送信成功時は実際に送信されたバイト数、
失敗時は ERROR です。ソケットがブロッキングモードで、
バッファに空きがなければsendは待機に入ります。
- ssize_t sendTo(void[] buf, SocketFlags flags, Address to);
ssize_t sendTo(void[] buf, Address to);
ssize_t sendTo(void[] buf, SocketFlags flags);
ssize_t sendTo(void[] buf); - データを、指定の送り先アドレスへ送信します。送り先アドレスが指定されていない場合は、接続が確立済みでなければならず、その接続先アドレスが使用されます。ソケットがブロッキングモードで、バッファに空きがなければsendToは待機に入ります。
- ssize_t receive(void[] buf, SocketFlags flags);
ssize_t receive(void[] buf); - データを受信します。受信成功時は実際に受信されたバイト数、
リモート側が接続を切断した場合は0、受信失敗時は ERROR
を返します。ソケットがブロッキングモードの場合、
receive は、受信データの到着を待機します。
- ssize_t receiveFrom(void[] buf, SocketFlags flags, out Address from);
ssize_t receiveFrom(void[] buf, out Address from);
ssize_t receiveFrom(void[] buf, SocketFlags flags);
ssize_t receiveFrom(void[] buf); - データを、指定のリモートアドレスから受信します。
ソケットがブロッキングモードの場合、receiveFrom は、
受信データの到着を待機します。
Returns:
受信成功時は実際に受信されたバイト数、 リモート側が接続を切断した場合は0、受信失敗時は ERROR を返します。
- int getOption(SocketOptionLevel level, SocketOption option, void[] result);
- ソケットオプションを取得します。resultに書き込まれたバイト数が返ります。
- int getOption(SocketOptionLevel level, SocketOption option, out int32_t result);
- 一個上と同様ですが、よくある、intやboolean型のオプションの場合のための特別版です。
- int getOption(SocketOptionLevel level, SocketOption option, out linger result);
- lingerオプションを取得します。
- void setOption(SocketOptionLevel level, SocketOption option, int32_t value);
- よくある、intやboolean型のオプションの場合のための特別版です。
- void setOption(SocketOptionLevel level, SocketOption option, linger value);
- lingerオプションを設定します。
- static int select(SocketSet checkRead, SocketSet checkWrite, SocketSet checkError, timeval* tv);
static int select(SocketSet checkRead, SocketSet checkWrite, SocketSet checkError, int microseconds);
static int select(SocketSet checkRead, SocketSet checkWrite, SocketSet checkError); - ソケットの状態が変化するのを待ちます。タイムアウト時間は、timeval 構造体か、もしくはミリ秒単位で指定できます。指定がなかったり、timeval が null であった場合、最大タイムアウト時間が使用されます。timeval 型のタイムアウト値は、select から戻った後の値は未規定です。この関数の返値は、通常は状態の変化したソケットの数、タイムアウト時は0、割り込み発生時は-1です。返値が0より大きいときには、SocketSet が、状態変化したソケットのみを含むように更新されています。connect中のソケットに関しては、write状態の変化が、接続が確立されて send 可能になったことを示します。listen中のソケットに関しては、read状態の変化が、接続要求が到着して accept 可能になったことを示します。
- this(AddressFamily af, SocketType type, ProtocolType protocol);
- class TcpSocket: std.socket.Socket;
- TcpSocket はTCP用のソケットを表すお手軽クラスです。
- this(AddressFamily family);
- ブロッキングTCPソケットを構築します
- this();
- ブロッキングTCPソケットを構築します
- this(Address connectTo);
- ブロッキングTCPソケットを構築し指定された InternetAddress に接続します
- class UdpSocket: std.socket.Socket;
- UdpSocket はUDP用のソケットを表すお手軽クラスです。
- this(AddressFamily family);
- ブロッキングUDPソケットを構築します
- this();
- ブロッキングUDPソケットを構築します