public static CAresChannel CAresChannel(this Loop loop) { Dictionary <int, Poll> dict = new Dictionary <int, Poll>(); var dns = new CAresChannel(new CAresChannelOptions() { SocketCallback = (channel, socket, read, write) => { if (read | write) { var poll = new Poll(loop, socket); poll.Event += (@event) => channel.Process(socket, -1); poll.Start(PollEvent.Read); dict[socket] = poll; } else { var poll = dict[socket]; poll.Close(); dict.Remove(socket); } } }); return(dns); }
internal ares_options ToStruct(CAresChannel channel) { var options = new ares_options() { timeout = Timeout, tries = Tries, udp_port = (ushort)UdpPort, tcp_port = (ushort)TcpPort }; options.sock_state_cb = sock_state_cb; if (SocketCallback != null) { var cb = new CAresSocketCallback(channel, SocketCallback); option_mask |= (int)ARES_OPT.SOCK_STATE_CB; options.sock_state_cb_data = cb.Handle; } return options; }
public static CAresChannel CAresChannel(this Loop loop) { Dictionary<int, Poll> dict = new Dictionary<int, Poll>(); var dns = new CAresChannel(new CAresChannelOptions() { SocketCallback = (channel, socket, read, write) => { if (read | write) { var poll = new Poll(loop, socket); poll.Event += (@event) => channel.Process(socket, -1); poll.Start(PollEvent.Read); dict[socket] = poll; } else { var poll = dict[socket]; poll.Close(); dict.Remove(socket); } } }); return dns; }
public CAresSocketCallback(CAresChannel channel, Action<CAresChannel, int, bool, bool> callback) { cb = callback; this.channel = channel; }