o Export new evutil_ascii_* functions to perform locale-independent character type operations.
o Try to compile better with MSVC: patches from Brodie Thiesfield
o New evconnlistener_get_fd function to expose a listener's associated socket.
+ o Expose an ev_socklen_t type for consistent use across platforms.
Changes in 2.0.2-alpha:
o Add a new flag to bufferevents to make all callbacks automatically deferred.
struct nameserver {
evutil_socket_t socket; /* a connected UDP socket */
struct sockaddr_storage address;
- socklen_t addrlen;
+ ev_socklen_t addrlen;
int failed_times; /* number of times which we have given this server a chance */
int timedout; /* number of times in a row a request has timed out */
struct event event;
u16 trans_id; /* Transaction id. */
struct evdns_server_port *port; /* Which port received this request on? */
struct sockaddr_storage addr; /* Where to send the response */
- socklen_t addrlen; /* length of addr */
+ ev_socklen_t addrlen; /* length of addr */
int n_answer; /* how many answer RRs have been set? */
int n_authority; /* how many authority RRs have been set? */
/** Port to bind to for outgoing DNS packets. */
struct sockaddr_storage global_outgoing_address;
- /** Socklen_t for global_outgoing_address. 0 if it isn't set. */
- socklen_t global_outgoing_addrlen;
+ /** ev_socklen_t for global_outgoing_address. 0 if it isn't set. */
+ ev_socklen_t global_outgoing_addrlen;
struct search_state *global_search_state;
/* a DNS client (addr,addrlen), and if it's well-formed, call the corresponding */
/* callback. */
static int
-request_parse(u8 *packet, int length, struct evdns_server_port *port, struct sockaddr *addr, socklen_t addrlen)
+request_parse(u8 *packet, int length, struct evdns_server_port *port, struct sockaddr *addr, ev_socklen_t addrlen)
{
int j = 0; /* index into packet */
u16 _t; /* used by the macros */
static void
nameserver_read(struct nameserver *ns) {
struct sockaddr_storage ss;
- socklen_t addrlen = sizeof(ss);
+ ev_socklen_t addrlen = sizeof(ss);
u8 packet[1500];
ASSERT_LOCKED(ns->base);
server_port_read(struct evdns_server_port *s) {
u8 packet[1500];
struct sockaddr_storage addr;
- socklen_t addrlen;
+ ev_socklen_t addrlen;
int r;
ASSERT_LOCKED(s);
* listener is closed." On Windows, though, it means "don't keep other
* processes from binding to this address while we're using it. */
return setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*) &one,
- (socklen_t)sizeof(one));
+ (ev_socklen_t)sizeof(one));
#else
return 0;
#endif
static int socket_connect(evutil_socket_t kefd, const char *address, unsigned short port);
static evutil_socket_t bind_socket_ai(struct addrinfo *, int reuse);
static evutil_socket_t bind_socket(const char *, ev_uint16_t, int reuse);
-static void name_from_addr(struct sockaddr *, socklen_t, char **, char **);
+static void name_from_addr(struct sockaddr *, ev_socklen_t, char **, char **);
static int evhttp_associate_new_request_with_connection(
struct evhttp_connection *evcon);
static void evhttp_connection_start_detectclose(
{
struct evhttp_connection *evcon = arg;
int error;
- socklen_t errsz = sizeof(error);
+ ev_socklen_t errsz = sizeof(error);
/* Check if the connection completed */
if (getsockopt(evcon->fd, SOL_SOCKET, SO_ERROR, (void*)&error,
{
struct evhttp *http = arg;
struct sockaddr_storage ss;
- socklen_t addrlen = sizeof(ss);
+ ev_socklen_t addrlen = sizeof(ss);
evutil_socket_t nfd;
if ((nfd = accept(fd, (struct sockaddr *)&ss, &addrlen)) == -1) {
static struct evhttp_connection*
evhttp_get_request_connection(
struct evhttp* http,
- evutil_socket_t fd, struct sockaddr *sa, socklen_t salen)
+ evutil_socket_t fd, struct sockaddr *sa, ev_socklen_t salen)
{
struct evhttp_connection *evcon;
char *hostname = NULL, *portname = NULL;
void
evhttp_get_request(struct evhttp *http, evutil_socket_t fd,
- struct sockaddr *sa, socklen_t salen)
+ struct sockaddr *sa, ev_socklen_t salen)
{
struct evhttp_connection *evcon;
#endif
static void
-name_from_addr(struct sockaddr *sa, socklen_t salen,
+name_from_addr(struct sockaddr *sa, ev_socklen_t salen,
char **phost, char **pport)
{
char ntop[NI_MAXHOST];
#define ev_ssize_t ssize_t
#endif
+#ifdef WIN32
+#define ev_socklen_t int
+#elif defined(_EVENT_socklen_t)
+#define ev_socklen_t _EVENT_socklen_t
+#else
+#define ev_socklen_t socklen_t
+#endif
+
#ifdef WIN32
/** A type wide enough to hold the output of "socket()" or "accept()". On
* Windows, this is an intptr_t; elsewhere, it is an int. */