aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/connect.c9
-rw-r--r--lib/getinfo.c4
-rw-r--r--lib/urldata.h5
3 files changed, 16 insertions, 2 deletions
diff --git a/lib/connect.c b/lib/connect.c
index b3928ef1e..e398f61fb 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -775,9 +775,12 @@ singleipconnect(struct connectdata *conn,
/* FIXME: do we have Curl_printable_address-like with struct sockaddr* as
argument? */
#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
- if(addr->family==AF_UNIX)
+ if(addr->family==AF_UNIX) {
infof(data, " Trying %s... ",
((const struct sockaddr_un*)(&addr->addr))->sun_path);
+ snprintf(data->info.ip, MAX_IPADR_LEN, "%s",
+ ((const struct sockaddr_un*)(&addr->addr))->sun_path);
+ }
else
#endif
{
@@ -789,8 +792,10 @@ singleipconnect(struct connectdata *conn,
iptoprint = &((const struct sockaddr_in*)(&addr->addr))->sin_addr;
if(Curl_inet_ntop(addr->family, iptoprint, addr_buf,
- sizeof(addr_buf)) != NULL)
+ sizeof(addr_buf)) != NULL) {
infof(data, " Trying %s... ", addr_buf);
+ snprintf(data->info.ip, MAX_IPADR_LEN, "%s", addr_buf);
+ }
}
if(data->set.tcp_nodelay)
diff --git a/lib/getinfo.c b/lib/getinfo.c
index 078154246..bef2ebac4 100644
--- a/lib/getinfo.c
+++ b/lib/getinfo.c
@@ -210,6 +210,10 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
option had been enabled! */
*param_charp = data->info.wouldredirect;
break;
+ case CURLINFO_PRIMARY_IP:
+ /* Return the ip address of the most recent (primary) connection */
+ *param_charp = data->info.ip;
+ break;
default:
return CURLE_BAD_FUNCTION_ARGUMENT;
}
diff --git a/lib/urldata.h b/lib/urldata.h
index fa93a6454..1f9d3ebd2 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -48,6 +48,8 @@
#define CURL_DEFAULT_USER "anonymous"
#define CURL_DEFAULT_PASSWORD "ftp@example.com"
+#define MAX_IPADR_LEN (4*9) /* should be enough to hold the longest ipv6 one */
+
#include "cookie.h"
#include "formdata.h"
@@ -1036,6 +1038,9 @@ struct PureInfo {
long numconnects; /* how many new connection did libcurl created */
char *contenttype; /* the content type of the object */
char *wouldredirect; /* URL this would've been redirected to if asked to */
+ char ip[MAX_IPADR_LEN]; /* this buffer gets the numerical ip version stored
+ at the connect *attempt* so it will get the last
+ tried connect IP even on failures */
};