Как правильно установить параметры сокета на std.net.curl?

Я пытаюсь реализовать onSocketOption делегировать для объекта HTTP Curl ( http://erdani.com/d/phobos-prerelease/std_net_curl.html).

int onSocketOption(curl_socket_t socketfd,
                   CurlSockType type) {
        import std.socket:Socket, SocketOptionLevel, SocketOption, Linger, AddressFamily;

        Socket sock = new Socket(socketfd, AddressFamily.INET);

        Linger lingerOpt;
        lingerOpt.on = 0;
        lingerOpt.time = 0;

        sock.setOption(SocketOptionLevel.SOCKET,
                       SocketOption.LINGER,
                       lingerOpt);

        return 0;
};

Иногда кажется, что работает, иногда я получаю std.socket.SocketOSException@/tmp/ldc.build/ldc/runtime/phobos/std/socket.d(3175): Unable to set socket option: Bad file descriptor

Есть ли другой способ использовать этот "curl_socket_t"? Это псевдоним socket_t который в свою очередь должен быть обычным сокетом fd (работающим на linux)

Обратите внимание, что HTTP не имеет такого обратного вызова, поэтому у меня есть форк std.net.curl, который добавляет этот интерфейс к миксину "Protocol" в curl.d:

@property void onSocketOption(int delegate(curl_socket_t,
                                           CurlSockType) callback)
{
    p.curl.onSocketOption = callback;
}

0 ответов

Другие вопросы по тегам