std.socket.Socket.setOption
- multiple declarations
Function Socket.setOption
Set a socket option.
Function Socket.setOption
Common case for setting integer and boolean options.
Function Socket.setOption
Set the linger option.
Function Socket.setOption
Sets a timeout (duration) option, i.e. SocketOption
or
RCVTIMEO
. Zero indicates no timeout.
In a typical application, you might also want to consider using a non-blocking socket instead of setting a timeout on a blocking one.
Note
While the receive timeout setting is generally quite accurate
on *nix systems even for smaller durations, there are two issues to
be aware of on Windows: First, although undocumented, the effective
timeout duration seems to be the one set on the socket plus half
a second. setOption()
tries to compensate for that, but still,
timeouts under 500ms are not possible on Windows. Second, be aware
that the actual amount of time spent until a blocking call returns
randomly varies on the order of 10ms.
Parameters
Name | Description |
---|---|
level | The level at which a socket option is defined. |
option | Either SocketOption or SocketOption . |
value | The timeout duration to set. Must not be negative. |
Throws
SocketException
if setting the options fails.
Example
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);
Authors
Christopher E. Miller, David Nadlinger, Vladimir Panteleev