Commit dd06c60a authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes

c-ares call a callback on socket state changes. A better way than the
ares_getsock() to get full control over the socket state.
parent 6ca627ae
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
  Changelog for the c-ares project

* May 3, 2006

- Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes
  c-ares call a callback on socket state changes. A better way than the
  ares_getsock() to get full control over the socket state.

* January 9, 2006

- Alexander Lazic improved the getservbyport_r() configure check.
@@ -28,8 +34,8 @@

- Added constants that will be used by ares_getaddrinfo

- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it is
  available to ensure it works properly in a threaded environment.
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it
  is available to ensure it works properly in a threaded environment.

* September 10

+15 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ extern "C" {
#define ARES_OPT_SERVERS        (1 << 6)
#define ARES_OPT_DOMAINS        (1 << 7)
#define ARES_OPT_LOOKUPS        (1 << 8)
#define ARES_OPT_SOCK_STATE_CB  (1 << 9)

/* Nameinfo flag values */
#define ARES_NI_NOFQDN                  (1 << 0)
@@ -135,6 +136,18 @@ extern "C" {
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
                                         ARES_GETSOCK_MAXNUM)))

#ifdef WIN32
typedef void (*ares_sock_state_cb)(void *data,
                                   SOCKET socket,
                                   int readable,
                                   int writable);
#else
typedef void (*ares_sock_state_cb)(void *data,
                                   int socket,
                                   int readable,
                                   int writable);
#endif

struct ares_options {
  int flags;
  int timeout;
@@ -147,6 +160,8 @@ struct ares_options {
  char **domains;
  int ndomains;
  char *lookups;
  ares_sock_state_cb sock_state_cb;
  void *sock_state_cb_data;
};

struct hostent;
+3 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@
#include "ares.h"
#include "ares_private.h"

void ares__close_sockets(struct server_state *server)
void ares__close_sockets(ares_channel channel, struct server_state *server)
{
  struct send_request *sendreq;

@@ -46,11 +46,13 @@ void ares__close_sockets(struct server_state *server)
  /* Close the TCP and UDP sockets. */
  if (server->tcp_socket != ARES_SOCKET_BAD)
    {
      SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0);
      closesocket(server->tcp_socket);
      server->tcp_socket = ARES_SOCKET_BAD;
    }
  if (server->udp_socket != ARES_SOCKET_BAD)
    {
      SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0);
      closesocket(server->udp_socket);
      server->udp_socket = ARES_SOCKET_BAD;
    }
+1 −1
Original line number Diff line number Diff line
@@ -38,6 +38,6 @@ void ares_cancel(ares_channel channel)
  if (!(channel->flags & ARES_FLAG_STAYOPEN))
  {
    for (i = 0; i < channel->nservers; i++)
      ares__close_sockets(&channel->servers[i]);
      ares__close_sockets(channel, &channel->servers[i]);
  }
}
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ void ares_destroy(ares_channel channel)
  struct query *query;

  for (i = 0; i < channel->nservers; i++)
    ares__close_sockets(&channel->servers[i]);
    ares__close_sockets(channel, &channel->servers[i]);
  free(channel->servers);
  for (i = 0; i < channel->ndomains; i++)
    free(channel->domains[i]);
Loading