diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/or/connection.c | 8 |
2 files changed, 9 insertions, 3 deletions
@@ -51,6 +51,10 @@ Changes in version 0.2.0.8-alpha - 2007-??-?? advantage of 64-bit platforms and to remove some possibly-costly voodoo. + o Minor bugfixes (portability): + - On some platforms, accept() can return a broken address. Detect + this more quietly, and deal accordingly. (Fixes bug 483.) + o Code simplifications and refactoring: - Make a bunch of functions static. Remove some dead code. - Pull out about a third of the really big routerlist.c; put it in a diff --git a/src/or/connection.c b/src/or/connection.c index b6af0910f9..b3d298435e 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -899,7 +899,7 @@ connection_handle_listener_read(connection_t *conn, int new_type) struct sockaddr_in remote; char addrbuf[256]; /* length of the remote address. Must be whatever accept() needs. */ - socklen_t remotelen = 256; + socklen_t remotelen = sizeof(addrbuf); char tmpbuf[INET_NTOA_BUF_LEN]; or_options_t *options = get_options(); @@ -932,9 +932,11 @@ connection_handle_listener_read(connection_t *conn, int new_type) set_constrained_socket_buffers(news, (int)options->ConstrainedSockSize); if (((struct sockaddr*)addrbuf)->sa_family != conn->socket_family) { - log_warn(LD_BUG, "A listener connection returned a socket with a " + /* This is annoying, but can apparently happen on some Darwins. */ + log_info(LD_BUG, "A listener connection returned a socket with a " "mismatched family. %s for addr_family %d gave us a socket " - "with address family %d.", conn_type_to_string(conn->type), + "with address family %d. Dropping.", + conn_type_to_string(conn->type), (int)conn->socket_family, (int)((struct sockaddr*)addrbuf)->sa_family); tor_close_socket(news); |