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);
        }
Пример #2
0
        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;
        }
Пример #3
0
		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;
		}
Пример #4
0
 public CAresSocketCallback(CAresChannel channel, Action<CAresChannel, int, bool, bool> callback)
 {
     cb = callback;
     this.channel = channel;
 }