Commit 67d94514 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Kim Rinnewitz reported that --local-port didn't work with TFTP transfers.

This happened because the tftp code always uncondionally did a bind()
without caring if one already had been done and then it failed. I wrote a
test case (1009) to verify this, but it is a bit error-prone since it will
have to pick a fixed local port number and since the tests are run on so
many different hosts in different situations I add it in disabled state.
parent 91b38857
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -6,8 +6,18 @@

                                  Changelog

Daniel S (4 October 2007)
- Kim Rinnewitz reported that --local-port didn't work with TFTP transfers.
  This happened because the tftp code always uncondionally did a bind()
  without caring if one already had been done and then it failed. I wrote a
  test case (1009) to verify this, but it is a bit error-prone since it will
  have to pick a fixed local port number and since the tests are run on so
  many different hosts in different situations I'll add it in disabled state.

Yang Tse (3 October 2007)
- Fixed issue related with the use of ares_timeout() result.

Daniel S (3 October 2007)
- Yang Tse, fix issue related with the use of ares_timeout() result.

- Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and
  CURLOPT_OPENSOCKETDATA to set a callback that allows an application to
+2 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ This release includes the following bugfixes:
 o curl_easy_escape() problem with byte values >= 128
 o handles chunked-encoded CONNECT responses
 o misuse of ares_timeout() result
 o --local-port on TFTP transfers

This release includes the following known bugs:

@@ -52,6 +53,6 @@ advice from friends like these:

 Dan Fandrich, Michal Marek, Gnter Knauf, Rob Crittenden, Immanuel Gregoire,
 Mark Davies, Max Katsev, Philip Langdale, Alex Fishman, Johnny Luong,
 Alexey Pesternikov, Yang Tse
 Alexey Pesternikov, Yang Tse, Kim Rinnewitz
 
        Thanks! (and sorry if I forgot to mention someone)
+1 −0
Original line number Diff line number Diff line
@@ -380,6 +380,7 @@ static CURLcode bindlocal(struct connectdata *conn,
        port = ntohs(((struct sockaddr_in6 *)&add)->sin6_port);
#endif
      infof(data, "Local port: %d\n", port);
      conn->bits.bound = TRUE;
      return CURLE_OK;
    }
    if(--portnum > 0) {
+4 −3
Original line number Diff line number Diff line
@@ -598,9 +598,9 @@ CURLcode Curl_tftp_connect(struct connectdata *conn, bool *done)

  tftp_set_timeouts(state);

  if(!conn->bits.reuse) {
    /* If not reused, bind to any interface, random UDP port. If it is reused,
     * this has already been done!
  if(!conn->bits.bound) {
    /* If not already bound, bind to any interface, random UDP port. If it is
     * reused or a custom local port was desired, this has already been done!
     *
     * We once used the size of the local_addr struct as the third argument for
     * bind() to better work with IPv6 or whatever size the struct could have,
@@ -619,6 +619,7 @@ CURLcode Curl_tftp_connect(struct connectdata *conn, bool *done)
            Curl_strerror(conn, SOCKERRNO));
      return CURLE_COULDNT_CONNECT;
    }
    conn->bits.bound = TRUE;
  }

  Curl_pgrsStartNow(conn->data);
+2 −0
Original line number Diff line number Diff line
@@ -609,6 +609,8 @@ struct ConnectBits {
  bool proxy_connect_closed; /* set true if a proxy disconnected the
                                connection in a CONNECT request with auth, so
                                that libcurl should reconnect and continue. */
  bool bound; /* set true if bind() has already been done on this socket/
                 connection */
};

struct hostname {
Loading