mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Delay getsockname() call until after connect() is done
On Windows, getsockname() on a nonblocking apparently won't work until the connection is done connecting. On XP, it seems to fail by reporting success and declaring that your address is INADDR_ANY. On the Win8 preview, though, it fails more loudly and says WSAEINVAL. Fix for bug 5374; bugfix on 0.1.1.14-alpha.
This commit is contained in:
parent
75fc4dbbca
commit
9d41629aa0
7
changes/bug5374
Normal file
7
changes/bug5374
Normal file
@ -0,0 +1,7 @@
|
||||
o Minor bugfixes:
|
||||
|
||||
- Don't check for whether the address we're using for outbound
|
||||
connections has changed until after the outbound connection has
|
||||
completed. On Windows, getsockname() doesn't succeed until the
|
||||
connection is finished. Fix for bug 5374; bugfix on
|
||||
0.1.1.14-alpha.
|
@ -1393,9 +1393,6 @@ connection_connect(connection_t *conn, const char *address,
|
||||
}
|
||||
}
|
||||
|
||||
if (!server_mode(options))
|
||||
client_check_address_changed(s);
|
||||
|
||||
/* it succeeded. we're connected. */
|
||||
log_fn(inprogress?LOG_DEBUG:LOG_INFO, LD_NET,
|
||||
"Connection to %s:%u %s (sock %d).",
|
||||
@ -3434,6 +3431,14 @@ static int
|
||||
connection_finished_connecting(connection_t *conn)
|
||||
{
|
||||
tor_assert(conn);
|
||||
|
||||
if (!server_mode(get_options())) {
|
||||
/* See whether getsockname() says our address changed. We need to do this
|
||||
* now that the connection has finished, because getsockname() on Windows
|
||||
* won't work until then. */
|
||||
client_check_address_changed(conn->s);
|
||||
}
|
||||
|
||||
switch (conn->type)
|
||||
{
|
||||
case CONN_TYPE_OR:
|
||||
|
Loading…
Reference in New Issue
Block a user