Commit e85e3054 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Roland Blom filed bug report #1481217

(http://curl.haxx.se/bug/view.cgi?id=1481217), with follow-ups by Michele Bini
and David Byron. libcurl previously wrongly used GetLastError() on windows to
get error details after socket-related function calls, when it really should
use WSAGetLastError() instead.

When changing to this, the former function Curl_ourerrno() is now instead
called Curl_sockerrno() as it is necessary to only use it to get errno from
socket-related functions as otherwise it won't work as intended on Windows.
parent 758f6eed
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -6,6 +6,17 @@

                                  Changelog

Daniel (5 May 2006)
- Roland Blom filed bug report #1481217
  (http://curl.haxx.se/bug/view.cgi?id=1481217), with follow-ups by Michele
  Bini and David Byron. libcurl previously wrongly used GetLastError() on
  windows to get error details after socket-related function calls, when it
  really should use WSAGetLastError() instead.

  When changing to this, the former function Curl_ourerrno() is now instead
  called Curl_sockerrno() as it is necessary to only use it to get errno from
  socket-related functions as otherwise it won't work as intended on Windows.

Daniel (4 May 2006)
- Mark Eichin submitted bug report #1480821
  (http://curl.haxx.se/bug/view.cgi?id=1480821) He found and identified a
+2 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ This release includes the following changes:

This release includes the following bugfixes:

 o WSAGetLastError() is now used (better) on Windows
 o GnuTLS non-block case that could cause data trashing
 o deflate code survives lack of zlib header
 o CURLOPT_INTERFACE works with hostname
@@ -47,6 +48,6 @@ advice from friends like these:

 Dan Fandrich, Ilja van Sprundel, David McCreedy, Tor Arntsen, Xavier Bouchoux,
 David Byron, Michele Bini, Ates Goral, Katie Wang, Robson Braga Araujo,
 Ale Vesely, Paul Querna, Gisle Vanem, Mark Eichin
 Ale Vesely, Paul Querna, Gisle Vanem, Mark Eichin, Roland Blom

        Thanks! (and sorry if I forgot to mention someone)
+12 −12
Original line number Diff line number Diff line
@@ -114,13 +114,13 @@ singleipconnect(struct connectdata *conn,
                bool *connected);

/*
 * Curl_ourerrno() returns the errno (or equivalent) on this platform to
 * hide platform specific for the function that calls this.
 * Curl_sockerrno() returns the *socket-related* errno (or equivalent) on this
 * platform to hide platform specific for the function that calls this.
 */
int Curl_ourerrno(void)
int Curl_sockerrno(void)
{
#ifdef WIN32
  return (int)GetLastError();
  return (int)WSAGetLastError();
#else
  return errno;
#endif
@@ -330,7 +330,7 @@ static CURLcode bindlocal(struct connectdata *conn,
      if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,
                     data->set.device, strlen(data->set.device)+1) != 0) {
        /* printf("Failed to BINDTODEVICE, socket: %d  device: %s error: %s\n",
           sockfd, data->set.device, Curl_strerror(Curl_ourerrno())); */
           sockfd, data->set.device, Curl_strerror(Curl_sockerrno())); */
        infof(data, "SO_BINDTODEVICE %s failed\n",
              data->set.device);
        /* This is typically "errno 1, error: Operation not permitted" if
@@ -408,7 +408,7 @@ static CURLcode bindlocal(struct connectdata *conn,
      break;
  } while(1);

  data->state.os_errno = Curl_ourerrno();
  data->state.os_errno = Curl_sockerrno();
  failf(data, "bind failure: %s",
        Curl_strerror(conn, data->state.os_errno));
  return CURLE_HTTP_PORT_FAILED;
@@ -452,7 +452,7 @@ static bool verifyconnect(curl_socket_t sockfd, int *error)

  if( -1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR,
                       (void *)&err, &errSize))
    err = Curl_ourerrno();
    err = Curl_sockerrno();

#ifdef _WIN32_WCE
  /* Always returns this error, bug in CE? */
@@ -471,7 +471,7 @@ static bool verifyconnect(curl_socket_t sockfd, int *error)
#else
  (void)sockfd;
  if (error)
    *error = Curl_ourerrno();
    *error = Curl_sockerrno();
#endif
  return rc;
}
@@ -610,7 +610,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
      infof(data, "Connection failed\n");

    if(trynextip(conn, sockindex, connected)) {
      error = Curl_ourerrno();
      error = Curl_sockerrno();
      data->state.os_errno = error;
      failf(data, "Failed connect to %s:%d; %s",
            conn->host.name, conn->port, Curl_strerror(conn,error));
@@ -642,7 +642,7 @@ static void tcpnodelay(struct connectdata *conn,
  if(setsockopt(sockfd, proto, TCP_NODELAY, (void *)&onoff,
                sizeof(onoff)) < 0)
    infof(data, "Could not set TCP_NODELAY: %s\n",
          Curl_strerror(conn, Curl_ourerrno()));
          Curl_strerror(conn, Curl_sockerrno()));
  else
    infof(data,"TCP_NODELAY set\n");
#else
@@ -664,7 +664,7 @@ static void nosigpipe(struct connectdata *conn,
  if(setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&onoff,
                sizeof(onoff)) < 0)
    infof(data, "Could not set SO_NOSIGPIPE: %s\n",
          Curl_strerror(conn, Curl_ourerrno()));
          Curl_strerror(conn, Curl_sockerrno()));
}
#else
#define nosigpipe(x,y)
@@ -717,7 +717,7 @@ singleipconnect(struct connectdata *conn,
    rc = 0;

  if(-1 == rc) {
    error = Curl_ourerrno();
    error = Curl_sockerrno();

    switch (error) {
    case EINPROGRESS:
+2 −2
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
@@ -37,7 +37,7 @@ CURLcode Curl_connecthost(struct connectdata *conn,
                          bool *connected /* truly connected? */
                          );

int Curl_ourerrno(void);
int Curl_sockerrno(void);

CURLcode Curl_store_ip_addr(struct connectdata *conn);

+1 −3
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
@@ -38,8 +38,6 @@
#include <sys/stat.h>
#endif

#include <errno.h>

#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#include <time.h>
#include <io.h>
Loading