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 #endif +#ifdef HAVE_SYS_UN_H +#include +#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 /* may need it */ #endif +#ifdef HAVE_SYS_UN_H +#include /* for sockaddr_un */ +#endif #ifdef HAVE_NETINET_TCP_H #include /* 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; -#ifdef ENABLE_IPV6 - if(addr->family==AF_INET6) - iptoprint= &((const struct sockaddr_in6*)(&addr->addr))->sin6_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 - Curl_inet_ntop(addr->family, iptoprint, addr_buf, sizeof(addr_buf)); - infof(data, " Trying %s... ", addr_buf); + { +#ifdef ENABLE_IPV6 + if(addr->family==AF_INET6) + iptoprint= &((const struct sockaddr_in6*)(&addr->addr))->sin6_addr; + else +#endif + 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);