Spec-Zone.ru › D

std.socket

Примитивы сокетов.

Пример
См. /dmd/samples/d/listener.d и /dmd/samples/d/htmlget.d
Лицензия:
Лицензия Boost 1.0.
Авторы:
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();
Возвращает:
true если последняя операция сокета завершилась неудачно, потому что сокет находился в режиме без блокировки, и операция должна была заблокироваться, или если сокет находится в режиме блокировки и установлен SNDTIMEO или RCVTIMEO, и операция истекла.
enum AddressFamily: ushort;

Домен связи, используемый для разрешения адреса.

UNSPEC

Неопределенный домен связи

UNIX

Локальная связь

INET

Протокол Интернета версии 4

IPX

Novell IPX

APPLETALK

AppleTalk

INET6

Протокол Интернета версии 6

enum SocketType: int;

Семантика связи

STREAM

Последовательные, надежные, двусторонние потоки байтов, основанные на связи

DGRAM

Бессоединённые, ненадежные датаграммы фиксированной максимальной длины; данные могут быть потеряны или прийти в неправильном порядке

RAW

Прямой доступ к протоколу

RDM

Надежно доставленные сообщенческие датаграммы

SEQPACKET

Последовательные, надежные, двусторонние датаграммы на основе связи с фиксированной максимальной длиной

enum ProtocolType: int;

Протокол

IP

Протокол Интернета версии 4

ICMP

Протокол управления сообщениями Интернета

IGMP

Протокол управления группами Интернета

GGP

Протокол шлюза-шлюз

TCP

Протокол управления передачей

PUP

Протокол универсальных пакетов PARC

UDP

Протокол датаграмм пользователя

IDP

Протокол Xerox NS

RAW

Сырые пакеты IP

IPV6

Протокол Интернета версии 6

class Protocol;

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);
Возвращает:
false при ошибке
nothrow @trusted bool getProtocolByType(ProtocolType type);
Возвращает:
false при ошибке
class Service;

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);

Если имя протокола опущено, будет соответствовать любой протокол.

Возвращает:
false при ошибке.
class HostException: std.socket.SocketOSException;

Класс для исключений, выбрасываемых InternetHost.

class InternetHost;

InternetHost — класс для разрешения адресов IPv4.

Рассмотрите использование getAddress, parseAddress и Address методов вместо прямого использования этого класса.

Примеры:
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;             // don't fail if not connected to internet

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(ih.getHostByAddr(ih.addrList[0]));
string getHostNameFromInt = ih.name.dup;

assert(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);

Разрешить имя хоста.

Возвращает:
false, если разрешение невозможно.
@trusted bool getHostByAddr(uint addr);

Разрешить номер адреса IPv4.

Параметры:
uint addr Адрес IPv4 для разрешения в порядке байтов хоста.
Возвращает:
false, если разрешение невозможно.
@trusted bool getHostByAddr(scope const(char)[] addr);

То же самое, что и предыдущее, но addr — это строка адреса IPv4 в форме с точками-десятичными a.b.c.d.

Возвращает:
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

Каноническое имя возвращается в член canonicalName в первом AddressInfo.

NUMERICHOST

Параметр node передаваемый в getAddressInfo должен быть числовой строкой. Это подавит любые потенциально длительные поиски сетевых адресов хостов.

AddressInfo[] getAddressInfo(T...)(scope const(char)[] node, scope T options);

Обеспечивает протокольно-независимый перевод имен хостов в адреса сокетов. Если не требуется расширенная функциональность, рассмотрите использование getAddress для совместимости со старыми системами.

Возвращает:
Массив с одним AddressInfo на каждый адрес сокета.
Выбрасывает:
SocketOSException при ошибке или SocketFeatureException , если эта функциональность недоступна на текущей системе.
Параметры:
const(char)[] node строка, содержащая имя хоста или числовой адрес
T options необязательные дополнительные параметры, определенные по типу:
  • string — имя службы или номер порта
  • AddressInfoFlags — флаги опций
  • AddressFamily — семейство адресов для фильтрации
  • SocketType — тип сокета для фильтрации
  • ProtocolType — протокол для фильтрации
Пример
// Roundtrip DNS resolution
auto results = getAddressInfo("www.digitalmars.com");
assert(results[0].address.toHostNameString() ==
    "digitalmars.com");

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

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

// Multihomed resolution
results = getAddressInfo("google.com");
assert(results.length > 1);

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

// Parsing 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 в противном случае.

Возвращает:
Массив с одним Address экземпляром на каждый адрес сокета.
Выбрасывает:
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 в противном случае.

Возвращает:
Экземпляр Address , представляющий указанный адрес.
Выбрасывает:
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;

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 @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();

Попытка получить адрес хоста в читаемом человеком виде.

Выбрасывает:
AddressException при ошибке или SocketFeatureException , если получение адреса для этого семейства адресов недоступно на текущей системе.
const @safe string toHostNameString();

Попытка получить имя хоста в виде полностью квалифицированного доменного имени.

Возвращает:
Полностью квалифицированное доменное имя, соответствующее этому Address, или null , если имя хоста не было разрешено.
Выбрасывает:
AddressException при ошибке или SocketFeatureException , если поиск имени хоста для этого семейства адресов недоступен на текущей системе.
const @safe string toPortString();

Попытка получить числовой номер порта в виде строки.

Выбрасывает:
AddressException при ошибке или SocketFeatureException , если получение номера порта для этого семейства адресов недоступно на текущей системе.
const @safe string toServiceNameString();

Попытка получить имя службы в виде строки.

Выбрасывает:
AddressException при ошибке или SocketFeatureException , если поиск имени службы для этого семейства адресов недоступен на текущей системе.
const @safe string toString();

Строка, представляющая этот адрес в читаемом человеком виде.

class UnknownAddress: std.socket.Address;

UnknownAddress encapsulates an unknown socket address.

class UnknownAddressReference: std.socket.Address;

UnknownAddressReference encapsulates a reference to an arbitrary socket address.

pure nothrow @nogc @safe this(sockaddr* sa, socklen_t len);

Создает Address со ссылкой на указанную sockaddr.

pure nothrow @system this(const(sockaddr)* sa, socklen_t len);

Создает Address с копией указанной sockaddr.

class InternetAddress: std.socket.Address;

InternetAddress encapsulates an IPv4 (Internet Protocol version 4) socket address.

Рассмотрите использование getAddress, parseAddress и Address методов вместо непосредственного использования этого класса.

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.

Параметры:
const(char)[] addr строка 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.

Параметры:
uint addr (необязательно) адрес IPv4 в порядке байтов хоста, может быть ADDR_ANY.
ushort port номер порта, может быть PORT_ANY.
pure nothrow @nogc @safe this(sockaddr_in addr);

Создает новый InternetAddress.

Параметры:
sockaddr_in addr sockaddr_in, полученный из вызовов API низкого уровня, таких как getifaddrs.
const @trusted string toAddrString();

Строка, представляющая адрес IPv4 в точечно-десятичной форме, в читаемом виде.

const @safe string toPortString();

Строка, представляющая номер порта IPv4 в читаемом виде.

const @safe string toHostNameString();

Попытка получить имя хоста в виде полностью квалифицированного доменного имени.

Возвращает:
Полностью квалифицированное доменное имя, соответствующее этому InternetAddress, или null , если имя хоста не было разрешено.
Выбрасывает:
AddressException при ошибке.
const @safe bool opEquals(Object o);

Сравнение с другим InternetAddress того же типа для проверки на равенство.

Возвращает:
true, если InternetAddress имеют одинаковый адрес и номер порта.
Примеры:
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 в точечно-десятичной форме a.b.c.d и возврат числа.

Возвращает:
Если строка не является корректным адресом IPv4, возвращается ADDR_NONE.
static nothrow @trusted string addrToString(uint addr);

Преобразование числового адреса IPv4 в порядке байтов хоста в строку, представляющую адрес IPv4 в точечно-десятичной форме, в читаемом виде.

class Internet6Address: std.socket.Address;

Internet6Address содержит адрес IPv6 (Internet Protocol версии 6) сокета.

Вместо прямого использования этого класса, рассмотрите использование методов getAddress, parseAddress и Address.

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.

Параметры:
const(char)[] addr строка адреса IPv6 узла в формате, описанном в RFC 2373, или имя узла, которое будет разрешено с помощью getAddressInfo.
const(char)[] service (необязательно) имя службы.
@safe this(scope const(char)[] addr, ushort port);

Создаёт новый Internet6Address.

Параметры:
const(char)[] addr строка адреса IPv6 узла в формате, описанном в RFC 2373, или имя узла, которое будет разрешено с помощью getAddressInfo.
ushort port номер порта, может быть PORT_ANY.
pure nothrow @nogc @safe this(ubyte[16] addr, ushort port);

pure nothrow @nogc @safe this(ushort port);

Создаёт новый Internet6Address.

Параметры:
ubyte[16] addr (необязательно) адрес IPv6 узла в порядке байтов хоста или ADDR_ANY.
ushort port номер порта, может быть PORT_ANY.
pure nothrow @nogc @safe this(sockaddr_in6 addr);

Создаёт новый Internet6Address.

Параметры:
sockaddr_in6 addr sockaddr_in6, полученный из вызовов API низкого уровня, таких как getifaddrs.
static @trusted ubyte[16] parse(scope const(char)[] addr);

Разбирает строку адреса IPv6 узла, как описано в RFC 2373, и возвращает адрес.

Исключения:
SocketException при ошибке.
class UnixAddress: std.socket.Address;

UnixAddress описывает адрес сокета Unix доменного сокета (AF_UNIX), т.е. сокета, привязанного к имени пути в файловой системе. Доступен только на поддерживаемых системах.

Linux также поддерживает абстрактное пространство имён адресов, в котором адреса независимы от файловой системы. Адрес сокета является абстрактным, если path начинается с нулевого байта ('\0'). Нулевые байты в других позициях абстрактного адреса разрешены и не имеют особого значения.

Пример
auto addr = new UnixAddress("/var/run/dbus/system_bus_socket");
auto abstractAddr = new UnixAddress("\0/tmp/dbus-OtHLWmCLPR");
См. также:
UNIX(7)
@safe this(scope const(char)[] path);

Создаёт новый UnixAddress из указанного пути.

pure nothrow @nogc @safe this(sockaddr_un addr);

Создаёт новый UnixAddress.

Параметры:
sockaddr_un addr sockaddr_un, полученный из вызовов API низкого уровня.
const @property @safe string path();

const @safe string toString();

Получить основной путь.

class SocketAcceptException: std.socket.SocketOSException;

Класс для исключений, выбрасываемых при Socket.accept.

enum SocketShutdown: int;

Как закрывается сокет:

RECEIVE

отказ от приёма данных сокета

SEND

отказ от отправки данных сокета

BOTH

как RECEIVE, так и SEND

enum SocketFlags: int;

Флаги могут быть объединены с помощью оператора OR:

NONE

нет флагов

OOB

данные потока вне очереди

PEEK

предварительный просмотр входящих данных без их удаления из очереди, только для приёма

DONTROUTE

данные не должны маршрутизироваться; этот флаг может быть проигнорирован. Только для отправки

struct TimeVal;

Значение таймаута продолжительности.

tv_sec_t seconds;

Количество секунд.

tv_usec_t microseconds;

Количество дополнительных микросекунд.

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();

Сбросить SocketSet так, чтобы в коллекции было 0 Socket.

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 находится в коллекции.

const pure nothrow @nogc @property @safe uint max();
Возвращает:
Текущую ёмкость этого SocketSet. Точное значение возвращаемого значения зависит от платформы.
Примечание
Начиная с D 2.065, это значение не указывает на ограничение, и SocketSet будет автоматически увеличивать свою ёмкость по мере необходимости.
enum SocketOptionLevel: int;

Уровень, на котором определяется параметр сокета:

SOCKET

Уровень сокета

IP

Уровень интернет-протокола версии 4

ICMP

Уровень протокола управления сообщениями интернета

IGMP

Уровень протокола управления группами интернета

GGP

Уровень протокола шлюза-шлюз

TCP

Уровень протокола управления передачей

PUP

Уровень универсального протокола пакетов PARC

UDP

Уровень протокола пользовательских дейтаграмм

IDP

Уровень протокола Xerox NS

RAW

Уровень сырого пакета IP

IPV6

Уровень интернет-протокола версии 6

struct Linger;

Информация о задержке для использования с SocketOption.LINGER.

l_onoff_t on;

Неноль для включения.

l_linger_t time;

Время задержки.

enum SocketOption: int;

Устанавливает опцию сокета:

DEBUG

Запись отладочной информации

BROADCAST

Разрешить передачу широковещательных сообщений

REUSEADDR

Разрешить повторное использование локального адреса

LINGER

Задержаться при закрытии, если присутствуют неотправленные данные

OOBINLINE

Получение данных вне полосы в полосе

SNDBUF

Размер буфера отправки

RCVBUF

Размер буфера приема

DONTROUTE

Не маршрутизировать

SNDTIMEO

Таймаут отправки

RCVTIMEO

Таймаут приема

ERROR

Получить и очистить статус ошибки

KEEPALIVE

Включить пакеты keep-alive

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-только

class Socket;

Socket — это класс, создающий конечную точку сетевого взаимодействия с использованием интерфейса сокетов Беркли.

@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();

Получить базовый дескриптор сокета.

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);

Связать локальный адрес с этим сокетом.

Параметры:
Адрес addr Address для связывания с этим сокетом.
Исключения:
SocketOSException при невозможности связать сокет.
@trusted void connect(Address to);

Установить соединение. Если сокет блокирующий, connect ожидает установления соединения. Если сокет неблокирующий, connect возвращает значение немедленно, и попытка соединения всё ещё в процессе.

@trusted void listen(int backlog);

Начать прослушивание входящего соединения. bind необходимо вызвать перед тем, как вы сможете listen. backlog указывает, сколько ожидающих входящих соединений будут помещены в очередь, до accept.

protected pure nothrow @safe Socket accepting();

Вызывается accept при необходимости создания нового сокета для нового соединения. Для использования производного класса переопределите этот метод и верните экземпляр вашего класса. У возвращённого сокета Socket не должно быть установленного дескриптора; Socket имеет защищённый конструктор this() для использования в этой ситуации.

Переопределите для использования производного класса. У возвращённого сокета дескриптор должен быть не установлен.

@trusted Socket accept();

Принять входящее соединение. Если сокет блокирующий, accept ожидает запроса соединения. Бросает исключение SocketAcceptException при невозможности принять соединение. См. accepting для использования с производными классами.

nothrow @nogc @trusted void shutdown(SocketShutdown how);

Отключает отправку и/или приём данных.

nothrow @nogc @trusted void close();

Немедленно разорвать все соединения и освободить ресурсы сокета. Объект Socket больше не может использоваться после close. Вызов shutdown перед close рекомендуется для сокетов ориентированных на соединение.

static @property @trusted string hostName();
Возвращает:
имя хоста локальной машины
@property @trusted Address remoteAddress();

Удалённый конечный Address.

@property @trusted Address localAddress();

Локальный конечный Address.

enum int ERROR;

Код ошибки отправки или приёма. См. wouldHaveBlocked, lastSocketError и Socket.getErrorText для получения дополнительной информации об ошибке.

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

@safe ptrdiff_t send(const(void)[] buf);

Отправить данные по соединению. Если сокет блокирующий, и не осталось места в буфере, send ожидает.

Возвращает:
Количество байт, фактически отправленных, или Socket.ERROR при ошибке.
@trusted ptrdiff_t sendTo(const(void)[] buf, SocketFlags flags, Address to);

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

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

@safe ptrdiff_t sendTo(const(void)[] buf);

Отправить данные по конкретному адресу назначения. Если адрес назначения не указан, то должно быть установлено соединение, и используется этот адрес. Если сокет блокирующий, и не осталось места в буфере, sendTo ожидает.

Возвращает:
Количество байт, фактически отправленных, или Socket.ERROR при ошибке.
@trusted ptrdiff_t receive(void[] buf, SocketFlags flags);

@safe ptrdiff_t receive(void[] buf);

Получить данные по соединению. Если сокет блокирующий, receive ожидает, пока не появятся данные для получения.

Возвращает:
Количество байт, фактически полученных, 0 если удалённая сторона закрыла соединение, или Socket.ERROR при ошибке.
@trusted ptrdiff_t receiveFrom(void[] buf, SocketFlags flags, ref Address from);

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

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

@safe ptrdiff_t receiveFrom(void[] buf);

Получить данные и получить удалённую конечную Address. Если сокет блокирующий, receiveFrom ожидает, пока не появятся данные для получения.

Возвращает:
Количество байт, фактически полученных, 0 если удалённая сторона закрыла соединение, или Socket.ERROR при ошибке.
@trusted int getOption(SocketOptionLevel level, SocketOption option, void[] result);

Получить параметр сокета.

Возвращает:
Количество байт, записанных в 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, 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. Ноль указывает на отсутствие тайм-аута.

В типичном приложении, вы также можете рассмотреть использование неблокирующего сокета вместо установки тайм-аута на блокирующий.

Примечание
Хотя установка тайм-аута приёма обычно достаточно точна на системах *nix даже для меньших продолжительностей, есть две проблемы, о которых следует знать в Windows: Во-первых, хотя это не документировано, фактическая продолжительность тайм-аута, кажется, равна установленному для сокета значению плюс полсекунды. setOption() пытается компенсировать это, но всё же, тайм-ауты меньше 500мс невозможны в Windows. Во-вторых, имейте в виду, что фактическое время, проведённое до возвращения блокирующего вызова, случайным образом колеблется в пределах 10мс.
Параметры:
SocketOptionLevel level Уровень, на котором определён параметр сокета.
SocketOption option Либо SocketOption.SNDTIMEO, либо SocketOption.RCVTIMEO.
Duration value Продолжительность тайм-аута для установки. Не должно быть отрицательным.
Исключения:
SocketException если установка параметров не удалась.
Пример
import std.datetime;
import std.typecons;
auto pair = socketPair();
scope(exit) foreach (s; pair) s.close();

// Set a receive timeout, and then wait at one end of
// the socket pair, knowing that no data will arrive.
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 keep-alive с указанными параметрами.

Параметры:
int time Количество секунд без активности до отправки первого пакета keep-alive.
int interval Количество секунд между отправками последующих пакетов keep-alive, если не получен ответ.
Исключения:
SocketOSException при ошибке установки параметров, или SocketFeatureException если на текущей платформе не поддерживается настройка параметров keep-alive.
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; если время ожидания не указано или TimeVal равно null, используется максимальное время ожидания. Время ожидания TimeVal имеет неопределенное значение, когда select возвращает значение.

Возвращаемое значение:
Количество сокетов, состояние которых изменилось, 0 при истечении времени ожидания, или -1 при прерывании. Если возвращаемое значение больше 0, то SocketSets обновляются так, чтобы содержать только сокеты, у которых изменилось состояние. Для соединяющегося сокета изменение состояния на запись означает, что соединение установлено и он готов к отправке. Для прослушивающего сокета изменение состояния на чтение означает, что поступил запрос на подключение и он готов к приёму. SocketSet обновляются, содержа только те сокеты, для которых произошло событие. Для connect() сокета, возможность записи означает подключение. Для listen() сокета, возможность чтения означает прослушивание Winsock; возможно, внутренне ограничено до 64 сокетов на набор.
Возвращаемое значение:
количество событий, 0 при истечении времени ожидания, или -1 при прерывании
protected pure nothrow @safe Address createAddress();

Может быть переопределён для поддержки других адресов.

Возвращаемое значение:
новый объект Address для текущей семейства адресов.
class TcpSocket: std.socket.Socket;

TcpSocket — это сокращённый класс для TCP сокета.

@safe this(AddressFamily family);

Создаёт блокирующий TCP сокет.

@safe this();

Создаёт блокирующий IPv4 TCP сокет.

@safe this(Address connectTo);

Создаёт блокирующий TCP сокет и подключается к Address.

class UdpSocket: std.socket.Socket;

UdpSocket — это сокращённый класс для UDP сокета.

@safe this(AddressFamily family);

Создаёт блокирующий UDP сокет.

@safe this();

Создаёт блокирующий IPv4 UDP сокет.

@trusted Socket[2] socketPair();

Создаёт пару соединённых сокетов.

Два сокета неразличимы.

Исключения:
SocketException если создание сокетов завершилось ошибкой.
Примеры:
immutable ubyte[] 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

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_socket.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API