eve.aio.windows.udp
Async UDP datagram socket primitives for Windows.
This module provides the Windows implementation of UDP networking primitives using Winsock2 API.
UDP is message-oriented: each send/receive operates on complete datagrams. Unlike TCP, there is no connection state or backpressure mechanism.
var UDP_BUFFER_SIZE
class UdpSocketState
Types 8
structUdpSocketConfig
UDP socket configuration.
Fields
size_t maxDatagramSizeMaximum datagram size for receive buffer.bool reuseAddrEnable SO_REUSEADDR on bind.bool broadcastEnable SO_BROADCAST for sending broadcast messages.Methods
structSocketAddress
Represents a remote endpoint address.
Fields
ushort familyAddress family (AFINET or AFINET6).ushort portPort number in host byte order.ubyte[4] ipv4IPv4 address bytes (only valid if family == AF_INET).ubyte[16] ipv6IPv6 address bytes (only valid if family == AF_INET6).private aliasDataCallback = void delegate(
ref UdpSocket socket, scope const(ubyte)[] data, SocketAddress sender) @safe
structUdpSocket
Async UDP socket wrapper.
Wraps a non-blocking UDP socket and integrates with the Layer 1 event loop for async send/receive operations.
Fields
UdpSocketState _stateMethods
UdpSocket create(UdpSocketConfig config = UdpSocketConfig.init) @trustedCreate a detached UDP socket wrapper.int bind(ref EventLoop loop, scope const(char)[] host, ushort port) @trustedBind the socket to a local endpoint.DatagramResult sendTo(scope const(ubyte)[] data, scope const(char)[] host, ushort port) @trustedSend a datagram to a specific destination.DatagramResult sendToAddress(scope const(ubyte)[] data, SocketAddress dest) @trustedSend a datagram to a specific destination address.UdpSocketState mutableState() @trustedA datagram received while receiving was paused.
Stores both the data and sender address for later delivery when receiving is resumed.
Fields
DataCallback onDataErrorCallback onErrorEventLoop * _loopSOCKET _socketToken _tokenUdpSocketConfig _configushort _localPortbool _receivingPausedubyte[] _recvBufferint _lastErrorbool _useOverlappedIoWhether this socket uses overlapped I/O mode.Token _prepareTokenPrepare token for polling IOCP completion status.OVERLAPPED _readOverlappedOverlapped structure for pending read operations.OVERLAPPED _writeOverlappedOverlapped structure for pending write operations.ubyte[UDP_BUFFER_SIZE] _overlappedRecvBufferRead buffer — must remain valid during overlapped read.ubyte[UDP_BUFFER_SIZE] _overlappedSendBufferWrite buffer — must remain valid during overlapped write.bool _readInProgressWhether a read operation is currently in progress.bool _writeInProgressWhether a write operation is currently in progress.SOCKADDR_STORAGE _senderAddrSender address storage for overlapped receive.int _senderAddrLenSender address length for overlapped receive.SOCKADDR_STORAGE _pendingSendAddrPending send destination address.int _pendingSendAddrLenPending send destination address length.size_t _pendingSendLenNumber of bytes in the pending send buffer.BufferedDatagram[] _pausedReceiveQueueQueue for datagrams received while receiving is paused (IOCP mode only). When paused, incoming datagrams are stored here instead of being delivered.Methods
DatagramResult sendTo(scope const(ubyte)[] data, scope const(char)[] host, ushort port) @trusted nothrowvoid handlePrepare(ref EventLoop loop, Token token) @trusted nothrowHandle prepare phase callback from the event loop.Constructors
this(UdpSocketConfig config)Range adapter for iterating over addrinfo linked list.
Fields
addrinfo * currentFunctions 8
private fn
UdpSocketConfig validated(UdpSocketConfig config) pure @safe nothrow @nogcValidate a socket config, returning defaults if invalid.private fn
const(char) * copyStringz(scope const(char)[] source, scope char[] buffer) @trusted nothrowCopy a D string slice to a null-terminated C string buffer.private fn
const(char) * portToString(ushort port, scope char[] buffer) @trusted nothrowConvert a port number to a null-terminated string.private fn
bool wouldBlock() @trusted nothrowCheck if the last Winsock error indicates the operation would block.private fn
ushort queryLocalPort(SOCKET sock) @trusted nothrowQuery the local port number for a bound socket.private fn
SocketAddress parseSocketAddress(ref const SOCKADDR_STORAGE storage) @trusted nothrow @nogcParse a SOCKADDR_STORAGE into a SocketAddress.private fn
AddrinfoRange addrinfoRange(addrinfo * first) pure @safe nothrow @nogcCreate a range over an addrinfo linked list.Variables 1
private enumvar
UDP_BUFFER_SIZE = 65507Size of the internal read/write buffer for overlapped I/O.