aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2008-05-01 21:34:34 +0000
committerDaniel Stenberg <daniel@haxx.se>2008-05-01 21:34:34 +0000
commit3d29bda9f836d21b35110d6a005d56b6931bee6a (patch)
treee1358118bcfae84d55348d4c554fea761d895553
parent459c66404364aca003bf90d83382162bf2da7b81 (diff)
- Bart Whiteley provided a patch that made libcurl work properly when an app
uses the CURLOPT_OPENSOCKETFUNCTION callback to create a unix domain socket to a http server.
-rw-r--r--CHANGES5
-rw-r--r--RELEASE-NOTES3
-rw-r--r--configure.ac4
-rw-r--r--lib/connect.c24
4 files changed, 30 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index fc3f3f0e9..b180b8156 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,11 @@
Changelog
+Daniel Stenberg (1 May 2008)
+- Bart Whiteley provided a patch that made libcurl work properly when an app
+ uses the CURLOPT_OPENSOCKETFUNCTION callback to create a unix domain socket
+ to a http server.
+
Daniel Stenberg (29 Apr 2008)
- To make it easier for applications that want lots of magic stuff done on
redirections and thus cannot use CURLOPT_FOLLOWLOCATION easily, we now
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 3a4fffeba..815e9ed07 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -26,6 +26,7 @@ This release includes the following bugfixes:
o the typechecker can be bypassed by defining CURL_DISABLE_TYPECHECK
o a pointer mixup could make the FTP code send bad user+password under rare
circumstances (found when using curlftpfs)
+ o the CURLOPT_OPENSOCKETFUNCTION can now be used to create a unix domain socket
This release includes the following known bugs:
@@ -46,6 +47,6 @@ advice from friends like these:
Michal Marek, Daniel Fandrich, Scott Barrett, Alexey Simak, Daniel Black,
Rafa Muyo, Andre Guibert de Bruet, Brock Noland, Sandor Feldi, Stefan Krause,
- David Shaw, Norbert Frese
+ David Shaw, Norbert Frese, Bart Whiteley
Thanks! (and sorry if I forgot to mention someone)
diff --git a/configure.ac b/configure.ac
index d9ba94ddd..503272883 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1861,6 +1861,7 @@ AC_CHECK_HEADERS(
arpa/inet.h \
net/if.h \
netinet/in.h \
+ sys/un.h \
netinet/tcp.h \
netdb.h \
sys/sockio.h \
@@ -1907,6 +1908,9 @@ dnl default includes
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
]
)
diff --git a/lib/connect.c b/lib/connect.c
index 063556315..dcccfe4d2 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -34,6 +34,9 @@
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> /* <netinet/tcp.h> may need it */
#endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h> /* for sockaddr_un */
+#endif
#ifdef HAVE_NETINET_TCP_H
#include <netinet/tcp.h> /* for TCP_NODELAY */
#endif
@@ -766,13 +769,24 @@ singleipconnect(struct connectdata *conn,
/* FIXME: do we have Curl_printable_address-like with struct sockaddr* as
argument? */
- iptoprint = &((const struct sockaddr_in*)(&addr->addr))->sin_addr;
+#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
+ if(addr->family==AF_UNIX)
+ infof(data, " Trying %s... ",
+ ((const struct sockaddr_un*)(&addr->addr))->sun_path);
+ else
+#endif
+ {
#ifdef ENABLE_IPV6
- if(addr->family==AF_INET6)
- iptoprint= &((const struct sockaddr_in6*)(&addr->addr))->sin6_addr;
+ if(addr->family==AF_INET6)
+ iptoprint= &((const struct sockaddr_in6*)(&addr->addr))->sin6_addr;
+ else
#endif
- Curl_inet_ntop(addr->family, iptoprint, addr_buf, sizeof(addr_buf));
- infof(data, " Trying %s... ", addr_buf);
+ iptoprint = &((const struct sockaddr_in*)(&addr->addr))->sin_addr;
+
+ if(Curl_inet_ntop(addr->family, iptoprint, addr_buf,
+ sizeof(addr_buf)) != NULL)
+ infof(data, " Trying %s... ", addr_buf);
+ }
if(data->set.tcp_nodelay)
tcpnodelay(conn, sockfd);