diff options
author | Nick Mathewson <nickm@torproject.org> | 2011-05-30 14:58:26 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2011-05-30 14:58:26 -0400 |
commit | 21de9d46e264ceb14f3fe59d17210d82f2499637 (patch) | |
tree | 225afa4993f268fc867d922e646f0449cedebf1c /src/common | |
parent | 5dc3c462dcf42488055685e7f4fdb4a1a48003f1 (diff) | |
parent | da7c60dcf310fb9914bfd1b84a34b440ab04900a (diff) | |
download | tor-21de9d46e264ceb14f3fe59d17210d82f2499637.tar.gz tor-21de9d46e264ceb14f3fe59d17210d82f2499637.zip |
Merge remote-tracking branch 'origin/maint-0.2.2'
Conflicts:
src/common/compat.c
src/or/main.c
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/compat.c | 32 | ||||
-rw-r--r-- | src/common/compat.h | 21 | ||||
-rw-r--r-- | src/common/compat_libevent.h | 4 | ||||
-rw-r--r-- | src/common/util.c | 8 | ||||
-rw-r--r-- | src/common/util.h | 4 |
5 files changed, 42 insertions, 27 deletions
diff --git a/src/common/compat.c b/src/common/compat.c index 1d00e30c4d..61a4a6f9be 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -870,7 +870,7 @@ socket_accounting_unlock(void) * Windows, where close()ing a socket doesn't work. Returns 0 on success, -1 * on failure. */ int -tor_close_socket(int s) +tor_close_socket(tor_socket_t s) { int r = 0; @@ -923,8 +923,10 @@ tor_close_socket(int s) /** Helper: if DEBUG_SOCKET_COUNTING is enabled, remember that <b>s</b> is * now an open socket. */ static INLINE void -mark_socket_open(int s) +mark_socket_open(tor_socket_t s) { + /* XXXX This bitarray business will NOT work on windows: sockets aren't + small ints there. */ if (s > max_socket) { if (max_socket == -1) { open_sockets = bitarray_init_zero(s+128); @@ -946,16 +948,16 @@ mark_socket_open(int s) /** @} */ /** As socket(), but counts the number of open sockets. */ -int +tor_socket_t tor_open_socket(int domain, int type, int protocol) { - int s; + tor_socket_t s; #ifdef SOCK_CLOEXEC #define LINUX_CLOEXEC_OPEN_SOCKET type |= SOCK_CLOEXEC; #endif s = socket(domain, type, protocol); - if (s >= 0) { + if (SOCKET_OK(s)) { #if !defined(LINUX_CLOEXEC_OPEN_SOCKET) && defined(FD_CLOEXEC) fcntl(s, F_SETFD, FD_CLOEXEC); #endif @@ -968,17 +970,17 @@ tor_open_socket(int domain, int type, int protocol) } /** As socket(), but counts the number of open sockets. */ -int +tor_socket_t tor_accept_socket(int sockfd, struct sockaddr *addr, socklen_t *len) { - int s; + tor_socket_t s; #if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) #define LINUX_CLOEXEC_ACCEPT s = accept4(sockfd, addr, len, SOCK_CLOEXEC); #else s = accept(sockfd, addr, len); #endif - if (s >= 0) { + if (SOCKET_OK(s)) { #if !defined(LINUX_CLOEXEC_ACCEPT) && defined(FD_CLOEXEC) fcntl(s, F_SETFD, FD_CLOEXEC); #endif @@ -1004,7 +1006,7 @@ get_n_open_sockets(void) /** Turn <b>socket</b> into a nonblocking socket. */ void -set_socket_nonblocking(int socket) +set_socket_nonblocking(tor_socket_t socket) { #if defined(MS_WINDOWS) unsigned long nonblocking = 1; @@ -1032,7 +1034,7 @@ set_socket_nonblocking(int socket) **/ /* It would be nicer just to set errno, but that won't work for windows. */ int -tor_socketpair(int family, int type, int protocol, int fd[2]) +tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2]) { //don't use win32 socketpairs (they are always bad) #if defined(HAVE_SOCKETPAIR) && !defined(MS_WINDOWS) @@ -1066,9 +1068,9 @@ tor_socketpair(int family, int type, int protocol, int fd[2]) * for now, and really, when localhost is down sometimes, we * have other problems too. */ - int listener = -1; - int connector = -1; - int acceptor = -1; + tor_socket_t listener = -1; + tor_socket_t connector = -1; + tor_socket_t acceptor = -1; struct sockaddr_in listen_addr; struct sockaddr_in connect_addr; int size; @@ -2678,11 +2680,11 @@ in_main_thread(void) */ #if defined(MS_WINDOWS) int -tor_socket_errno(int sock) +tor_socket_errno(tor_socket_t sock) { int optval, optvallen=sizeof(optval); int err = WSAGetLastError(); - if (err == WSAEWOULDBLOCK && sock >= 0) { + if (err == WSAEWOULDBLOCK && SOCKET_OK(sock)) { if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (void*)&optval, &optvallen)) return err; if (optval) diff --git a/src/common/compat.h b/src/common/compat.h index a317ea45c5..094036dff2 100644 --- a/src/common/compat.h +++ b/src/common/compat.h @@ -395,9 +395,18 @@ int tor_fd_seekend(int fd); typedef int socklen_t; #endif -int tor_close_socket(int s); -int tor_open_socket(int domain, int type, int protocol); -int tor_accept_socket(int sockfd, struct sockaddr *addr, socklen_t *len); +#ifdef MS_WINDOWS +#define tor_socket_t intptr_t +#define SOCKET_OK(s) ((s) != INVALID_SOCKET) +#else +#define tor_socket_t int +#define SOCKET_OK(s) ((s) >= 0) +#endif + +int tor_close_socket(tor_socket_t s); +tor_socket_t tor_open_socket(int domain, int type, int protocol); +tor_socket_t tor_accept_socket(int sockfd, struct sockaddr *addr, + socklen_t *len); int get_n_open_sockets(void); #define tor_socket_send(s, buf, len, flags) send(s, buf, len, flags) @@ -469,8 +478,8 @@ int tor_inet_aton(const char *cp, struct in_addr *addr) ATTR_NONNULL((1,2)); const char *tor_inet_ntop(int af, const void *src, char *dst, size_t len); int tor_inet_pton(int af, const char *src, void *dst); int tor_lookup_hostname(const char *name, uint32_t *addr) ATTR_NONNULL((1,2)); -void set_socket_nonblocking(int socket); -int tor_socketpair(int family, int type, int protocol, int fd[2]); +void set_socket_nonblocking(tor_socket_t socket); +int tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2]); int network_init(void); /* For stupid historical reasons, windows sockets have an independent @@ -497,7 +506,7 @@ int network_init(void); ((e) == WSAEMFILE || (e) == WSAENOBUFS) /** Return true if e is EADDRINUSE or the local equivalent. */ #define ERRNO_IS_EADDRINUSE(e) ((e) == WSAEADDRINUSE) -int tor_socket_errno(int sock); +int tor_socket_errno(tor_socket_t sock); const char *tor_socket_strerror(int e); #else #define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN) diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h index ecf25806d5..496544d005 100644 --- a/src/common/compat_libevent.h +++ b/src/common/compat_libevent.h @@ -12,11 +12,15 @@ struct event_base; struct bufferevent; #endif + #ifdef HAVE_EVENT2_EVENT_H #include <event2/util.h> #else +#ifndef EVUTIL_SOCKET_DEFINED +#define EVUTIL_SOCKET_DEFINED #define evutil_socket_t int #endif +#endif void configure_libevent_logging(void); void suppress_libevent_log_msg(const char *msg); diff --git a/src/common/util.c b/src/common/util.c index ad321ee048..a5a6ea3e8b 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1573,7 +1573,7 @@ rate_limit_log(ratelim_t *lim, time_t now) * was returned by open(). Return the number of bytes written, or -1 * on error. Only use if fd is a blocking fd. */ ssize_t -write_all(int fd, const char *buf, size_t count, int isSocket) +write_all(tor_socket_t fd, const char *buf, size_t count, int isSocket) { size_t written = 0; ssize_t result; @@ -1583,7 +1583,7 @@ write_all(int fd, const char *buf, size_t count, int isSocket) if (isSocket) result = tor_socket_send(fd, buf+written, count-written, 0); else - result = write(fd, buf+written, count-written); + result = write((int)fd, buf+written, count-written); if (result<0) return -1; written += result; @@ -1597,7 +1597,7 @@ write_all(int fd, const char *buf, size_t count, int isSocket) * open(). Return the number of bytes read, or -1 on error. Only use * if fd is a blocking fd. */ ssize_t -read_all(int fd, char *buf, size_t count, int isSocket) +read_all(tor_socket_t fd, char *buf, size_t count, int isSocket) { size_t numread = 0; ssize_t result; @@ -1609,7 +1609,7 @@ read_all(int fd, char *buf, size_t count, int isSocket) if (isSocket) result = tor_socket_recv(fd, buf+numread, count-numread, 0); else - result = read(fd, buf+numread, count-numread); + result = read((int)fd, buf+numread, count-numread); if (result<0) return -1; else if (result == 0) diff --git a/src/common/util.h b/src/common/util.h index e8d5de2ef4..4495c02232 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -276,8 +276,8 @@ typedef struct ratelim_t { char *rate_limit_log(ratelim_t *lim, time_t now); /* File helpers */ -ssize_t write_all(int fd, const char *buf, size_t count, int isSocket); -ssize_t read_all(int fd, char *buf, size_t count, int isSocket); +ssize_t write_all(tor_socket_t fd, const char *buf, size_t count, int isSocket); +ssize_t read_all(tor_socket_t fd, char *buf, size_t count, int isSocket); /** Return values from file_status(); see that function's documentation * for details. */ |