英語版
このページの英語版を見る

std.socket

ソケットプリミティブ。
Authors:
Christopher E. Miller, David Nadlinger, Vladimir Panteleev

ソース std/socket.d

class SocketException: object.Exception;
std.socket がスローする基本例外。
@property @safe string lastSocketError();
最近発生したネットワークエラーのエラーメッセージを返す。
class SocketOSException: std.socket.SocketException;
オペレーティング・システムによって報告されたネットワーク・エラーを表すソケット例外。
int errorCode;
プラットフォーム固有のエラー・コード。
@safe this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null, int err = _lasterr(), string function(int) @trusted errorFormatter = &formatSocketError);
@safe this(string msg, Throwable next, string file = __FILE__, size_t line = __LINE__, int err = _lasterr(), string function(int) @trusted errorFormatter = &formatSocketError);
@safe this(string msg, int err, string function(int) @trusted errorFormatter = &formatSocketError, string file = __FILE__, size_t line = __LINE__, Throwable next = null);
class SocketParameterException: std.socket.SocketException;
ユーザー・コードによって指定された無効なパラメータを表すソケット例外。
class SocketFeatureException: std.socket.SocketException;
現在のシステムで利用できないネットワーク機能を使用しようとしたソケット例外。 現在のシステムで利用できないネットワーク機能を使おうとしたことを表すソケット例外。
nothrow @nogc @safe bool wouldHaveBlocked();
Returns:
true ソケットがノンブロッキングモードであり、操作がブロックされたために最後のソケット操作が失敗した場合 がノンブロッキングモードであり、操作がブロックされた、 または、ソケットがブロッキングモードで、 または を設定した、 を設定し、操作がタイムアウトした場合である。SNDTIMEO RCVTIMEO
enum AddressFamily: ushort;
アドレス解決に使用した通信ドメイン
UNSPEC
未指定のアドレスファミリ
UNIX
ローカル通信(Unix ソケット)
INET
インターネットプロトコルバージョン4
IPX
ノベルIPX
APPLETALK
アップルトーク
INET6
インターネットプロトコルバージョン6
enum SocketType: int;
通信セマンティクス
STREAM
シーケンス化された信頼性の高い双方向通信ベースのバイトストリーム
DGRAM
コネクションレスで、最大長が固定された信頼性の低いデータグラム。
RAW
生のプロトコル・アクセス
RDM
信頼性のあるメッセージ・データグラム
SEQPACKET
シーケンス化された、信頼性の高い、双方向接続ベースのデータグラム。
enum ProtocolType: int;
プロトコル
IP
インターネット・プロトコル・バージョン4
ICMP
インターネット制御メッセージプロトコル
IGMP
インターネットグループ管理プロトコル
GGP
ゲートウェイ間プロトコル
TCP
伝送制御プロトコル
PUP
PARCユニバーサルパケットプロトコル
UDP
ユーザーデータグラムプロトコル
IDP
ゼロックスNSプロトコル
RAW
生のIPパケット
IPV6
インターネット・プロトコル・バージョン6
class Protocol;
プロトコル情報を取得するためのクラス。

例:

auto proto = new Protocol;
writeln("About protocol TCP:");
if (proto.getProtocolByType(ProtocolType.TCP))
{
    writefln("  Name: %s", proto.name);
    foreach (string s; proto.aliases)
         writefln("  Alias: %s", s);
}
else
    writeln("  No information found");

ProtocolType type;

string name;

string[] aliases;
これらのメンバは、以下の関数のいずれかが正常にコールされたときに入力される:
nothrow @trusted bool getProtocolByName(scope const(char)[] name);
Returns:
失敗した場合はfalseとなる。
nothrow @trusted bool getProtocolByType(ProtocolType type);
Returns:
失敗時false
class Service;
サービス情報を取得するためのクラス。

例:

auto serv = new Service;
writeln("About service epmap:");
if (serv.getServiceByName("epmap", "tcp"))
{
    writefln("  Service: %s", serv.name);
    writefln("  Port: %d", serv.port);
    writefln("  Protocol: %s", serv.protocolName);
    foreach (string s; serv.aliases)
         writefln("  Alias: %s", s);
}
else
    writefln("  No service for epmap.");

string name;

string[] aliases;

ushort port;

string protocolName;
これらのメンバは、以下の関数のいずれかが正常にコールされたときに入力される:
nothrow @trusted bool getServiceByName(scope const(char)[] name, scope const(char)[] protocolName = null);

nothrow @trusted bool getServiceByPort(ushort port, scope const(char)[] protocolName = null);
プロトコル名が省略された場合は、任意のプロトコルがマッチする。
Returns:
失敗した場合は false を返す。
class HostException: std.socket.SocketOSException;
InternetHost からスローされる例外のクラス。
class InternetHost;
IPv4アドレスを解決するクラス。
このクラスを直接使うのではなく、getAddressparseAddressAddress のメソッドの使用を検討すること。 このクラスを直接使うのではなく
Examples:
InternetHost ih = new InternetHost;

ih.getHostByAddr(0x7F_00_00_01);
writeln(ih.addrList[0]); // 0x7F_00_00_01
ih.getHostByAddr("127.0.0.1");
writeln(ih.addrList[0]); // 0x7F_00_00_01

if (!ih.getHostByName("www.digitalmars.com"))
    return;             // インターネットに接続していなくても失敗しない

assert(ih.addrList.length);
InternetAddress ia = new InternetAddress(ih.addrList[0], InternetAddress.PORT_ANY);
assert(ih.name == "www.digitalmars.com" || ih.name == "digitalmars.com",
        ih.name);

/* テスト・スイートで以下のassertがランダムに失敗する。
 * https://issues.dlang.org/show_bug.cgi?id=22791
 * だから、失敗したら無視すればいい。
 */
//assert(ih.getHostByAddr(ih.addrList[0]));
if (ih.getHostByAddr(ih.addrList[0]))
{
    string getHostNameFromInt = ih.name.dup;

    // これはコンパイラのテスト・スイートでランダムに失敗する
    //assert(ih.getHostByAddr(ia.toAddrString()));

    if (ih.getHostByAddr(ia.toAddrString()))
    {
        string getHostNameFromStr = ih.name.dup;
        writeln(getHostNameFromInt); // getHostNameFromStr
    }
}
string name;

string[] aliases;

uint[] addrList;
これらのメンバは、以下の関数のいずれかが正常に呼び出されたときに値が設定される:
@trusted bool getHostByName(scope const(char)[] name);
ホスト名を解決する。
Returns:
解決できない場合はfalseを返す。
@trusted bool getHostByAddr(uint addr);
IPv4アドレス番号を解決する。
Parameters:
uint addr 解決するIPv4アドレスをホストバイトオーダーで指定する。
Returns:
解決できない場合はfalse。
@trusted bool getHostByAddr(scope const(char)[] addr);
前述と同じだが、addrはIPv4アドレス文字列である。 IPv4アドレス文字列である。
Returns:
解決できない場合はfalseを指定する。
struct AddressInfo;
getAddressInfo で取得したソケットアドレスに関する情報を保持する。
AddressFamily family;
アドレスファミリ
SocketType type;
ソケット型
ProtocolType protocol;
プロトコル
Address address;
ソケットアドレス
string canonicalName;
AddressInfoFlags.CANONNAME が使用される場合、カノニカル名。
enum AddressInfoFlags: int;
getaddrinfo ですべてのプラットフォームでサポートされるフラグのサブセットである。 getAddressInfo のオプションフラグを指定する。
PASSIVE
結果のアドレスは、Socket.bind への呼び出しで使用される。
CANONNAME
正規名は、最初のAddressInfocanonicalName メンバーに返される。
NUMERICHOST
getAddressInfo に渡されるnode パラメータは、数値文字列でなければならない。 これにより、長くなる可能性のあるネットワークホストアドレスの検索が 抑えられる。
AddressInfo[] getAddressInfo(T...)(scope const(char)[] node, scope T options);
ホスト名からソケットアドレスへのプロトコルに依存しない変換を行う。 アドレスへのプロトコルに依存しない変換を提供する。高度な機能を必要としない場合は、古いシステムとの互換性のために getAddress の使用を検討すること。
Returns:
1つのソケットアドレスに1つのAddressInfo を持つ配列。
Throws:
SocketOSException 失敗した場合、または この関数が現在のシステムで利用できない場合。 SocketFeatureException
Parameters:
const(char)[] node ホスト名または数値アドレスを含む文字列
T options オプションの追加パラメーターを "型"で指定する:
  • string - サービス名またはポート番号
  • AddressInfoFlags - オプションフラグ
  • AddressFamily - フィルタリングするアドレスファミリ
  • SocketType - フィルタリングするソケット型
  • ProtocolType - プロトコル

例:

// DNSのラウンドトリップ解決
auto results = getAddressInfo("www.digitalmars.com");
assert(results[0].address.toHostNameString() ==
    "digitalmars.com");

// Canonical名
results = getAddressInfo("www.digitalmars.com",
    AddressInfoFlags.CANONNAME);
assert(results[0].canonicalName == "digitalmars.com");

// IPv6解決
results = getAddressInfo("ipv6.google.com");
assert(results[0].family == AddressFamily.INET6);

// マルチホーム解決
results = getAddressInfo("google.com");
assert(results.length > 1);

// IPv4の解析
results = getAddressInfo("127.0.0.1",
    AddressInfoFlags.NUMERICHOST);
assert(results.length && results[0].family ==
    AddressFamily.INET);

// IPv6の解析
results = getAddressInfo("::1",
    AddressInfoFlags.NUMERICHOST);
assert(results.length && results[0].family ==
    AddressFamily.INET6);

@safe Address[] getAddress(scope const(char)[] hostname, scope const(char)[] service = null);

@safe Address[] getAddress(scope const(char)[] hostname, ushort port);
ホスト名からソケットアドレスへのプロトコルに依存しない変換を提供する アドレスへのプロトコルに依存しない変換を提供する。現在のシステムがサポートしていればgetAddressInfo を使用する、 それ以外の場合はInternetHost を使用する。
Returns:
1つのソケットアドレスにつき、1つのAddress インスタンスを持つ配列である。
Throws:
SocketOSException 失敗すると

例:

writeln("Resolving www.digitalmars.com:");
try
{
    auto addresses = getAddress("www.digitalmars.com");
    foreach (address; addresses)
        writefln("  IP: %s", address.toAddrString());
}
catch (SocketException e)
    writefln("  Lookup failed: %s", e.msg);

@safe Address parseAddress(scope const(char)[] hostaddr, scope const(char)[] service = null);

@safe Address parseAddress(scope const(char)[] hostaddr, ushort port);
プロトコルに依存しないネットワークアドレスの解析を提供する。名前解決を試みない。 名前解決を試みない。getAddressInfo 現在のシステムがサポートしていれば AddressInfoFlags.NUMERICHOST を使う。 InternetAddress を使用する。
Returns:
指定されたアドレスを表すAddress インスタンス。
Throws:
SocketException 失敗した場合

例:

writeln("Enter IP address:");
string ip = readln().chomp();
try
{
    Address address = parseAddress(ip);
    writefln("Looking up reverse of %s:",
        address.toAddrString());
    try
    {
        string reverse = address.toHostNameString();
        if (reverse)
            writefln("  Reverse name: %s", reverse);
        else
            writeln("  Reverse hostname not found.");
    }
    catch (SocketException e)
        writefln("  Lookup error: %s", e.msg);
}
catch (SocketException e)
{
    writefln("  %s is not a valid IP address: %s",
        ip, e.msg);
}

class AddressException: std.socket.SocketOSException;
Address からスローされる例外のためのクラス。
abstract class Address;
ソケットアドレスを表す抽象クラス

例:

writeln("About www.google.com port 80:");
try
{
    Address[] addresses = getAddress("www.google.com", 80);
    writefln("  %d addresses found.", addresses.length);
    foreach (int i, Address a; addresses)
    {
        writefln("  Address %d:", i+1);
        writefln("    IP address: %s", a.toAddrString());
        writefln("    Hostname: %s", a.toHostNameString());
        writefln("    Port: %s", a.toPortString());
        writefln("    Service name: %s",
            a.toServiceNameString());
    }
}
catch (SocketException e)
    writefln("  Lookup error: %s", e.msg);

abstract pure nothrow @nogc @property @safe sockaddr* name();

abstract const pure nothrow @nogc @property @safe const(sockaddr)* name();
sockaddr 構造体へのポインタを返す。
abstract const pure nothrow @nogc @property @safe socklen_t nameLen();
sockaddr 構造体の実際のサイズを返す。
const pure nothrow @nogc @property @safe AddressFamily addressFamily();
このアドレスのファミリ。
const @safe string toAddrString();
ホストアドレスを人間が読める文字列として取得しようとする。
Throws:
AddressException 失敗した場合、または このアドレスファミリーのアドレス検索が現在のシステムで利用できない場合 で利用できない。SocketFeatureException
const @safe string toHostNameString();
ホスト名を完全修飾ドメイン名として取得しようとする。
Returns:
このAddress に対応するFQDN、またはホスト名が解決しなかった場合はnull 。 に対応するFQDN。
Throws:
AddressException に対応するFQDN。 このアドレスファミリーのホスト名検索が現在のシステムで利用できない場合 のホスト名を検索できない。SocketFeatureException
const @safe string toPortString();
数値ポート番号を文字列として取得しようとする。
Throws:
AddressException 失敗した場合、あるいは このアドレスファミリーのポート番号検索が現在のシステムで利用できない場合 を取得しようとする。SocketFeatureException
const @safe string toServiceNameString();
サービス名を文字列として取得しようとする。
Throws:
AddressException 失敗した場合、あるいは このアドレスファミリーのサービス名検索が現在のシステムで利用できない場合 のサービス名を文字列で取得しようとする。SocketFeatureException
const @safe string toString();
このアドレスを表す可読文字列。
class UnknownAddress: std.socket.Address;
未知のソケットアドレスをカプセル化する。
class UnknownAddressReference: std.socket.Address;
任意の ソケットアドレスへの参照をカプセル化する。
pure nothrow @nogc @safe this(sockaddr* sa, socklen_t len);
指定されたsockaddr への参照でAddress を構築する。
pure nothrow @system this(const(sockaddr)* sa, socklen_t len);
指定されたsockaddr のコピーでAddress を構築する。
class InternetAddress: std.socket.Address;
IPv4 (Internet Protocol version 4) ソケットアドレスをカプセル化する。
このクラスを直接使用するのではなく、getAddressparseAddressAddress メソッドの使用を考慮する。 メソッドを使用する。
enum uint ADDR_ANY;
任意の IPv4 ホストアドレス。
enum uint ADDR_NONE;
無効な IPv4 ホストアドレス。
enum ushort PORT_ANY;
任意の IPv4 ポート番号。
const pure nothrow @nogc @property @safe ushort port();
IPv4ポート番号(ホスト・バイト順)を返す。
const pure nothrow @nogc @property @safe uint addr();
IPv4 アドレス番号(ホスト・バイト順)を返す。
@safe this(scope const(char)[] addr, ushort port);
新しいInternetAddress を構築する。
Parameters:
const(char)[] addr ドット付き10進数形式のIPv4アドレス文字列a.b.c.d、 を使用して解決されるホスト名である。InternetHost オブジェクトを使って解決される。
ushort port ポート番号は、PORT_ANY
pure nothrow @nogc @safe this(uint addr, ushort port);

pure nothrow @nogc @safe this(ushort port);
新しいInternetAddress を構築する。
Parameters:
uint addr (オプション) ホストバイトオーダーのIPv4アドレス。ADDR_ANY
ushort port ポート番号、PORT_ANY である。
pure nothrow @nogc @safe this(sockaddr_in addr);
新しいInternetAddress を構築する。
Parameters:
sockaddr_in addr getifaddrsなどの低レベルAPIコールから得られるsockaddr_in。
const @trusted string toAddrString();
人間が読み取り可能な文字列で、IPv4アドレスをドット付き10進数で表す。
const @safe string toPortString();
IPv4ポートを表す人間が読める文字列。
const @safe string toHostNameString();
ホスト名を完全修飾ドメイン名で取得しようとする。
Returns:
このInternetAddress に対応するFQDN、またはホスト名が解決しない場合は null ホスト名が解決しなかった場合
Throws:
AddressException を返す。
const @safe bool opEquals(Object o);
別の 等価比較のサポートを提供する。
Returns:
InternetAddressが同じアドレスとポート番号を共有する場合、trueを返す。 になる。
Examples:
auto addr1 = new InternetAddress("127.0.0.1", 80);
auto addr2 = new InternetAddress("127.0.0.2", 80);

writeln(addr1); // addr1
assert(addr1 != addr2);
static nothrow @trusted uint parse(scope const(char)[] addr);
IPv4アドレス文字列をドット付き10進数のa.b.c.d形式で解析する。 でパースし、その数値を返す。
Returns:
文字列が正規のIPv4アドレスでない場合、a.b.c.d、 ADDR_NONE が返される。
static nothrow @trusted string addrToString(uint addr);
ホストバイトオーダーのIPv4アドレス番号を、人間が読み取り可能な文字列に変換する。 文字列に変換する。
class Internet6Address: std.socket.Address;
IPv6 (Internet Protocol version 6) ソケットアドレスをカプセル化する。
このクラスを直接使用するのではなく、getAddressparseAddressAddress メソッドの使用を考慮すること。 メソッドを使用することを考慮する。
static pure nothrow @nogc @property ref @safe const(ubyte)[16] ADDR_ANY();
任意の IPv6 ホストアドレス。
enum ushort PORT_ANY;
任意の IPv6 ポート番号。
const pure nothrow @nogc @property @safe ushort port();
IPv6 ポート番号を返す
const pure nothrow @nogc @property @safe ubyte[16] addr();
IPv6 アドレスを返す。
@trusted this(scope const(char)[] addr, scope const(char)[] service = null);
新しいInternet6Address を構築する。
Parameters:
const(char)[] addr RFC2373に記述されている形式のIPv6ホストアドレス文字列、 または、getAddressInfo を使用して解決されるホスト名。
const(char)[] service (オプション)サービス名。
@safe this(scope const(char)[] addr, ushort port);
新しいInternet6Address を構築する。
Parameters:
const(char)[] addr RFC 2373に記述されている形式のIPv6ホストアドレス文字列、 またはgetAddressInfo を使用して解決されるホスト名である。
ushort port ポート番号は、PORT_ANY
pure nothrow @nogc @safe this(ubyte[16] addr, ushort port);

pure nothrow @nogc @safe this(ushort port);
新しいInternet6Address を構築する。
Parameters:
ubyte[16] addr (オプション) ホストバイトオーダーのIPv6ホストアドレス、または ADDR_ANY.
ushort port ポート番号は、PORT_ANY
pure nothrow @nogc @safe this(sockaddr_in6 addr);
新しいInternet6Address を構築する。
Parameters:
sockaddr_in6 addr sockaddr_in6は、getifaddrsのような低レベルのAPIコールから取得される。
static @trusted ubyte[16] parse(scope const(char)[] addr);
IPv6ホストアドレス文字列をRFC 2373の記述に従って解析し、そのアドレスを返す。 アドレスを返す。
Throws:
SocketException エラー時に返される。
class UnixAddress: std.socket.Address;
Unix ドメインソケット(AF_UNIX)のアドレスをカプセル化する、 すなわち、ファイルシステムのパス名にバインドされたソケットである。 サポートされているシステムでのみ利用可能である。
Linuxは抽象アドレス名前空間もサポートしている。 はファイルシステムから独立している。ソケットアドレスは抽象アドレスである。 であり、path がヌルバイト('\0')で始まる。抽象アドレスの他の 抽象アドレスの他の位置でのヌルバイトは許容され、特別な意味はない。 特別な意味はない。

例:

auto addr = new UnixAddress("/var/run/dbus/system_bus_socket");
auto abstractAddr = new UnixAddress("\0/tmp/dbus-OtHLWmCLPR");

See Also:
@safe this(scope const(char)[] path);
指定されたパスから新しいUnixAddress を構築する。
pure nothrow @nogc @safe this(sockaddr_un addr);
新しいUnixAddress を構築する。
Parameters:
sockaddr_un addr 下位レベルのAPIコールから取得したsockaddr_un。
const @property @safe string path();

const @safe string toString();
基礎となるパスを取得する。
class SocketAcceptException: std.socket.SocketOSException;
Socket.accept でスローされる例外。
enum SocketShutdown: int;
ソケットのシャットダウン方法:
RECEIVE
ソケットの受信を禁止する
SEND
ソケット送信を禁止する
BOTH
受信と送信の両方
enum SocketFlags: int;
ソケットフラグを OR で指定する:
NONE
フラグを指定しない
OOB
帯域外ストリームデータ
PEEK
受信データをキューから削除せずに覗き見る。
DONTROUTE
このフラグは無視してもよい。このフラグは無視してもよい。
struct TimeVal;
持続時間タイムアウト値。
inout pure nothrow @nogc @property ref @safe inout(tv_sec_t) seconds() return;
秒数。
inout pure nothrow @nogc @property ref @safe inout(tv_usec_t) microseconds() return;
追加マイクロ秒数。
class SocketSet;
Socket.select で使用するソケットのコレクション。
SocketSetプラットフォームfd_set 型をラップする。ただし fd_set, SocketSetとは異なり、静的にFD_SETSIZE などの制限はなく、必要に応じて増加する。
pure nothrow @safe this(size_t size = FD_SETSIZE);
特定の初期容量を持つSocketSetを作成する(デフォルトは FD_SETSIZE デフォルトはシステムのデフォルト容量)。
pure nothrow @nogc @safe void reset();
コレクションにSocketが0個になるように、SocketSet をリセットする。
pure nothrow @safe void add(Socket s);
Socket をコレクションに追加する。 このソケットはまだコレクションに存在してはならない。
pure nothrow @safe void remove(Socket s);
コレクションからSocket を削除する。 ソケットがコレクションにない場合は何もしない。
const pure nothrow @nogc @safe int isSet(Socket s);
このSocket がコレクションにある場合、0 以外を返す。
const pure nothrow @nogc @property @safe uint max();
Returns:
このSocketSet の現在の容量。正確な 戻り値の正確な意味はプラットフォームによって異なる。

注釈: D 2.065以降、この値は制限を意味しない。 SocketSet D2.065以降、この値は制限を示すものではない。 自動的に容量を増やす。

enum SocketOptionLevel: int;
ソケットオプションが定義されているレベル:
SOCKET
ソケットレベル
IP
インターネットプロトコルバージョン4レベル
ICMP
インターネット制御メッセージプロトコルレベル
IGMP
インターネットグループ管理プロトコルレベル
GGP
ゲートウェイ間プロトコルレベル
TCP
伝送制御プロトコルレベル
PUP
PARC ユニバーサルパケットプロトコルレベル
UDP
ユーザーデータグラムプロトコルレベル
IDP
Xerox NSプロトコルレベル
RAW
生IPパケットレベル
IPV6
インターネットプロトコルバージョン6レベル
struct Linger;
SocketOption.LINGERで使用するリンガー情報。
inout pure nothrow @nogc @property ref @safe inout(l_onoff_t) on() return;
オンの場合は非ゼロ。
inout pure nothrow @nogc @property ref @safe inout(l_linger_t) time() return;
リンガー時間。
enum SocketOption: int;
ソケットオプションを指定する:
DEBUG
デバッグ情報を記録する
BROADCAST
ブロードキャストメッセージの送信を許可する
REUSEADDR
アドレスのローカル再利用を許可する
LINGER
未送信のデータがある場合、クローズで待機する
OOBINLINE
帯域外データを帯域内で受信する
SNDBUF
送信バッファサイズ
RCVBUF
受信バッファサイズ
DONTROUTE
ルーティングしない
SNDTIMEO
送信タイムアウト
RCVTIMEO
受信タイムアウト
ERROR
エラーステータスの取得とクリア
KEEPALIVE
キープアライブパケットを有効にする
ACCEPTCONN
聞く
RCVLOWAT
処理する最小入力バイト数
SNDLOWAT
処理する最小出力バイト数
TYPE
ソケット型
TCP_NODELAY
送信合体用のNagleアルゴリズムを無効にする
IPV6_UNICAST_HOPS
IPユニキャストホップ制限
IPV6_MULTICAST_IF
IPマルチキャストインターフェース
IPV6_MULTICAST_LOOP
IPマルチキャストループバック
IPV6_MULTICAST_HOPS
IPマルチキャストホップ
IPV6_JOIN_GROUP
IPグループ・メンバーシップを追加する
IPV6_LEAVE_GROUP
IPグループメンバーシップを削除する
IPV6_V6ONLY
ワイルドカードバインドを AF_INET6-only として扱う
class Socket;
Berkeleyソケットインターフェースを使用してネットワーク通信エンドポイントを作成する を使用してネットワーク通信エンドポイントを作成するクラスである。
@trusted this(AddressFamily af, SocketType type, ProtocolType protocol);

@safe this(AddressFamily af, SocketType type);

@trusted this(AddressFamily af, SocketType type, scope const(char)[] protocolName);
ブロッキングソケットを作成する。ブロックソケットを作成する。 アドレスファミリ内でこのソケット型をサポートする単一のプロトコル型が存在する場合、ProtocolType は省略できる。 を省略できる。
@safe this(scope const AddressInfo info);
指定された AddressInfo 構造体のパラメータを使用してブロッキングソケットを作成する。
pure nothrow @nogc @safe this(socket_t sock, AddressFamily af);
既存のソケットハンドルを使用する。
const pure nothrow @nogc @property @safe socket_t handle();
ソケットハンドルを取得する。
pure nothrow @nogc @property @safe socket_t release();
Socket オブジェクトからソケットハンドルを解放する。ソケットハンドルを解放すると ソケットハンドルが解放されると、ソケットオブジェクトのメソッドは使用できなくなる。これは ソケットのデストラクタはソケットを閉じない。 あなたの責任となる。
リリースせずにハンドルを取得するには、handle プロパティを使用する。
const nothrow @nogc @property @trusted bool blocking();

@property @trusted void blocking(bool byes);
ソケットのブロッキングフラグを取得/設定する。
ソケットがブロッキングしている場合、receive(), accept(), send() のコールはブロックされ、データ/アクションを待つ。 の呼び出しはブロックされ、データ/アクションを待つ。 ノンブロッキングソケットは、ブロッキングせずに直ちにリターンする。
@property @safe AddressFamily addressFamily();
ソケットのアドレスファミリを取得する。
const @property @trusted bool isAlive();
ソケットのアドレスファミリを取得する。
@trusted void bind(Address addr);
このソケットにローカルアドレスを関連付ける。
Parameters:
Address addr この Addressを指定する。
Throws:
SocketOSExceptionソケットをバインドできない場合
@trusted void connect(Address to);
接続を確立する。ソケットがブロックされている場合、connect は接続が確立されるまで待つ。 接続が確立されるのを待つ。ソケットがノンブロッキングの場合、connect は直ちに戻り、接続の試みはまだ進行中である。
@trusted void listen(int backlog);
bind 着信接続をリッスンする。 が呼び出されなければならない。 listen.を呼び出す必要がある。 backlogは、保留中の 着信コネクションは、acceptedまでキューに入れられる。
protected pure nothrow @safe Socket accepting();
新しい接続のために新しいSocket を作成しなければならないとき、accept によって呼び出される。 によって呼び出される。派生クラスを使用するには、このメソッドをオーバーライドし、そのクラスのインスタンスを返す。 のインスタンスを返す。返されるSocket のハンドルは、設定されてはならない。 Socket には、このような場合に使用するプロテクトされたコンストラクタthis() がある。 がある。
派生クラスを使用する場合はオーバーライドする。 返されたソケットのハンドルは設定してはならない。
@trusted Socket accept();
着信接続を受け付ける。ソケットがブロッキングされている場合 accept 接続要求を待つ。接続を受け付けられない場合はSocketAcceptException をスローする。 をスローする。派生クラスでの使用についてはaccepting を参照のこと。
nothrow @nogc @trusted void shutdown(SocketShutdown how);
送受信を無効にする。
nothrow @nogc scope @trusted void close();
すべての接続を直ちに切断し、ソケットリソースを解放する。 Socket オブジェクトは close. の前にshutdown を呼び出すことを推奨する。 closeの前に呼び出すことを推奨する。 を呼び出すことを推奨する。
static @property @trusted string hostName();
Returns:
ローカルマシンのホスト名
@property @trusted Address remoteAddress();
リモートエンドポイントAddress.
@property @trusted Address localAddress();
ローカルエンドポイントAddress.
enum int ERROR;
送信または受信エラーコード。wouldHaveBlocked を参照のこと、 lastSocketError およびSocket.getErrorText を参照のこと。 を参照のこと。
@trusted ptrdiff_t send(scope const(void)[] buf, SocketFlags flags);

@safe ptrdiff_t send(scope const(void)[] buf);
コネクション上でデータを送信する。ソケットがブロッキング中で バッファ領域が残っていない、 sendを待つ。
Returns:
実際に送信されたバイト数、失敗した場合はSocket.ERROR を返す。 失敗した。
@trusted ptrdiff_t sendTo(scope const(void)[] buf, SocketFlags flags, Address to);

@safe ptrdiff_t sendTo(scope const(void)[] buf, Address to);

@trusted ptrdiff_t sendTo(scope const(void)[] buf, SocketFlags flags);

@safe ptrdiff_t sendTo(scope const(void)[] buf);
特定の宛先アドレスにデータを送信する。宛先アドレスが 宛先アドレスが指定されていない場合は、コネクションが確立しており、そのアドレスが使用される。 ソケットがブロック中で、バッファ領域が残っていない場合、 sendToを待つ。
Returns:
実際に送信されたバイト数、失敗した場合はSocket.ERROR を返す。 失敗した場合。
@trusted ptrdiff_t receive(scope void[] buf, SocketFlags flags);

@safe ptrdiff_t receive(scope void[] buf);
コネクションでデータを受信する。ソケットがブロックしている場合、 receive データを受信するまで待つ。
Returns:
実際に受信したバイト数。リモート側が接続を閉じた場合は0 、失敗した場合は を返す。 を、失敗した場合はSocket.ERROR を返す。
@trusted ptrdiff_t receiveFrom(scope void[] buf, SocketFlags flags, ref Address from);

@safe ptrdiff_t receiveFrom(scope void[] buf, ref Address from);

@trusted ptrdiff_t receiveFrom(scope void[] buf, SocketFlags flags);

@safe ptrdiff_t receiveFrom(scope void[] buf);
データを受信し、リモートエンドポイントAddress を取得する。 ソケットがブロックされている場合 receiveFrom受信するデータがあるまで待つ。 を待つ。
Returns:
実際に受信したバイト数。リモート側が接続を閉じた場合は0 、失敗した場合は を返す。 失敗した場合はSocket.ERROR を返す。
@trusted int getOption(SocketOptionLevel level, SocketOption option, scope void[] result);
ソケットオプションを取得する。
Returns:
に書き込まれたバイト数。 result. 実際の結果のバイト長 - getsockopt() とは大きく異なる。
@trusted int getOption(SocketOptionLevel level, SocketOption option, out int32_t result);
整数オプションや真偽値オプションを取得する場合によく使われる。
@trusted int getOption(SocketOptionLevel level, SocketOption option, out Linger result);
linger オプションを取得する。
@trusted void getOption(SocketOptionLevel level, SocketOption option, out Duration result);
タイムアウト(継続時間)オプションを取得する。
@trusted void setOption(SocketOptionLevel level, SocketOption option, scope void[] value);
ソケットオプションを設定する。
@trusted void setOption(SocketOptionLevel level, SocketOption option, int32_t value);
整数オプションやブーリアンオプションを設定する。
@trusted void setOption(SocketOptionLevel level, SocketOption option, Linger value);
linger オプションを設定する。
@trusted void setOption(SocketOptionLevel level, SocketOption option, Duration value);
SocketOption.SNDTIMEO タイムアウト(継続時間)オプションを設定する。 RCVTIMEO.ゼロはタイムアウトがないことを示す。
典型的なアプリケーションでは、ブロッキングソケットにタイムアウトを設定する代わりに を使用することも検討したい。

注釈: 受信タイムアウトの設定は一般的にかなり正確である。 受信タイムアウトの設定は一般的に非常に正確であるが Windowsでは、注意すべき2つの問題がある。 がある:第一に、文書化されていないが、有効な まず、文書化されていないが、有効なタイムアウト時間はソケットで設定されたタイムアウト時間に半 秒を足したものになるようである。 秒である。 setOption()はそれを補正しようとしているが、それでも500ms以下のタイムアウトは不可能である、 Windowsでは500ミリ秒以下のタイムアウトは不可能である。第二に ブロッキングコールが戻ってくるまでの実際の時間は、10msのオーダーでランダムに変化する。 は10msのオーダーでランダムに変化する。

Parameters:
SocketOptionLevel level ソケットオプションが定義されるレベル。
SocketOption option SocketOption.SNDTIMEO またはSocketOption.RCVTIMEO のどちらかである。
Duration value 設定するタイムアウト時間。負数であってはならない。
Throws:
SocketException オプションの設定に失敗した場合

例:

import std.datetime;
import std.typecons;
auto pair = socketPair();
scope(exit) foreach (s; pair) s.close();

// 受信タイムアウトを設定し、データが届かないことを承知で
// ソケットペアの片方で待つ。
pair[0].setOption(SocketOptionLevel.SOCKET,
    SocketOption.RCVTIMEO, dur!"seconds"(1));

auto sw = StopWatch(Yes.autoStart);
ubyte[1] buffer;
pair[0].receive(buffer);
writefln("Waited %s ms until the socket timed out.",
    sw.peek.msecs);

@safe string getErrorText();
このソケットのエラー状態をテキストで取得する。 ソケットのエラーステータスをクリアする。
@trusted void setKeepAlive(int time, int interval);
指定されたパラメータで TCP キープアライブを有効にする。
Parameters:
int time 最初の キープアライブパケットを送信する
int interval キープアライブパケットが送信されるまでの秒数。 パケットを送信するまでの秒数。
Throws:
SocketOSException オプションの設定に失敗した場合 キープアライブパラメータの設定が がサポートされていない場合。SocketFeatureException
static @trusted int select(SocketSet checkRead, SocketSet checkWrite, SocketSet checkError, Duration timeout);

static @safe int select(SocketSet checkRead, SocketSet checkWrite, SocketSet checkError);

static @trusted int select(SocketSet checkRead, SocketSet checkWrite, SocketSet checkError, TimeVal* timeout);
ソケットの状態が変わるのを待つ。待ち時間が core.time.Durationまたは TimeVal タイムアウトが指定されなかったり TimeValnull の場合、最大タイムアウトが使われる。タイムアウトが指定されていない場合、またはTimeVal が返されるとき、タイムアウトの値は未定義である。 selectが返される。
Returns:
タイムアウト時に0 、ステータスが変更されたソケットの数を示す、 または中断時に-1 。戻り値が0 より大きい場合、 は、ステータスを持つソケットだけを含むように更新される、 を超える場合、SocketSets は、ステータスが変更されたソケットのみを含むように更新される。 を含むように更新される。接続中のソケットの場合、書き込みステータスの変化は接続が確立され、接続が可能になったことを意味する。 接続中のソケットでは、書き込みステータスの変化は接続が確立され送信できることを意味する。リスニングソケットの場合 接続中のソケットでは、書き込みステータスの変化は接続が確立され、送信できることを意味する。 受諾できることを意味する。
SocketSet イベントが発生したソケットのみを含むように更新された。 connect() のソケットでは、書き込み可能とは接続されていることを意味する。 listen() ソケットの場合、読み込み可能とはリスニングしていることを意味する。 Winsock 内部的に64ソケット/セットに制限されている可能性がある。
Returns:
イベント数、タイムアウトの場合は 0、割り込みの場合は -1 を指定する。
protected pure nothrow @safe Address createAddress();
他のアドレスをサポートするようにオーバーライドできる。
Returns:
現在のアドレス・ファミリ用の新しいAddress オブジェクト。
class TcpSocket: std.socket.Socket;
TCP ソケットのショートカット・クラス。
@safe this(AddressFamily family);
ブロッキングTCPソケットを構築する。
@safe this();
ブロック型 IPv4 TCP ソケットを構築する。
@safe this(Address connectTo);
ブロッキング TCP ソケットを構築し、指定されたAddress に接続する。
class UdpSocket: std.socket.Socket;
UDP ソケットのショートカット・クラス。
@safe this(AddressFamily family);
ブロッキングUDPソケットを構築する。
@safe this();
ブロッキングIPv4 UDPソケットを構築する。
@trusted Socket[2] socketPair();
接続されたソケットのペアを作成する。
2つのソケットは区別できない。
Throws:
SocketException ソケットの作成に失敗した場合
Examples:
immutable ubyte[4] data = [1, 2, 3, 4];
auto pair = socketPair();
scope(exit) foreach (s; pair) s.close();

pair[0].send(data[]);

auto buf = new ubyte[data.length];
pair[1].receive(buf);
writeln(buf); // data