SocketOutputRange

Output range wrapper

Constructors

this
this(Socket socket)

ditto

Members

Functions

close
void close()

Close socket

put
ptrdiff_t put(T data)

Output range

put
ptrdiff_t put(E e)
ptrdiff_t put(R range)
ptrdiff_t put(E[] a)

Output range

put
ptrdiff_t put(dchar c)
ptrdiff_t put(S range)

Send encoded string

Properties

socket
Socket socket [@property getter]

Wrapped socket

Examples

static assert(isOutputRange!(SocketOutputRange!void, int));
static assert(isOutputRange!(SocketOutputRange!char, char));

auto pair = socketPair();
auto sender = pair[0];
auto receiver = pair[1];

sender.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"seconds"(10));
receiver.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"seconds"(10));

auto range = SocketOutputRange!int(sender);

put(range, 1);
put(range, 2);
put(range, 3);

range.close();

import std.algorithm;
assert(equal(SocketInputRange!int(receiver), [1, 2, 3]));
import std.utf;
static if (is(typeof(byUTF!char(""d)))) {
    auto pair = socketPair();
    auto sender = pair[0];
    auto receiver = pair[1];

    sender.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"seconds"(10));
    receiver.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"seconds"(10));

    auto range = SocketOutputRange!wchar(sender);

    auto data = only("foo", "bar").join(" ");
    static assert(is(ElementType!(typeof(data)) == dchar));

    range.put(data);
    range.close();

    assert(SocketInputRange!wchar(receiver).array == "foo bar"w);
} else {
    pragma(msg, "[WARNING]: std.utf.byUTF is required to use encoded string sender of SocketOutputRange");
}

Meta