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;
-
UnknownAddressencapsulates an unknown socket address. - class UnknownAddressReference: std.socket.Address;
-
UnknownAddressReferenceencapsulates 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;
-
InternetAddressencapsulates 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 addrsockaddr_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 addrsockaddr_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 addrsockaddr_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так, чтобы в коллекции было 0Socket. - 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);
-
Связать локальный адрес с этим сокетом.
- Параметры:
Адрес addrAddressдля связывания с этим сокетом.
- Исключения:
-
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);
- @trusted this(AddressFamily af, SocketType type, ProtocolType protocol);
-
Включает 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