From: Tony Finch Date: Thu, 5 Jun 2014 17:01:11 +0000 (+0100) Subject: Fix udpsend and ip_connectedsocket(). X-Git-Tag: exim-4_83_RC2^0 X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=a6d4c44ef48936ac169cd0da7ea149cbc81c9716;p=exim.git Fix udpsend and ip_connectedsocket(). The ip_connectedsocket() function's socket type support and error reporting did not work properly. --- diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 93c163cdc..606c8201f 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -132,6 +132,9 @@ JH/25 Expand the coverage of the delivery $host and $host_address to JH/26 Port service names are now accepted for tls_on_connect_ports, to align with daemon_smtp_ports. Bug 72. +TF/03 Fix udpsend. The ip_connectedsocket() function's socket type + support and error reporting did not work properly. + Exim version 4.82 ----------------- diff --git a/src/src/ip.c b/src/src/ip.c index 0211adc1e..1d4e368ec 100644 --- a/src/src/ip.c +++ b/src/src/ip.c @@ -248,8 +248,14 @@ return -1; } + +/************************************************* +* Create connected socket to remote host * +*************************************************/ + /* Create a socket and connect to host (name or number, ipv6 ok) at one of port-range. + Arguments: type SOCK_DGRAM or SOCK_STREAM af AF_INET6 or AF_INET for the socket type @@ -317,8 +323,8 @@ else for (h = &shost; h != NULL; h = h->next) { fd = (Ustrchr(h->address, ':') != 0) - ? (fd6 < 0) ? (fd6 = ip_socket(SOCK_STREAM, af = AF_INET6)) : fd6 - : (fd4 < 0) ? (fd4 = ip_socket(SOCK_STREAM, af = AF_INET )) : fd4; + ? (fd6 < 0) ? (fd6 = ip_socket(type, af = AF_INET6)) : fd6 + : (fd4 < 0) ? (fd4 = ip_socket(type, af = AF_INET )) : fd4; if (fd < 0) { @@ -340,8 +346,8 @@ for (h = &shost; h != NULL; h = h->next) } } -*errstr = string_sprintf("failed to connect to " - "%s: couldn't connect to any host", hostname, strerror(errno)); +*errstr = string_sprintf("failed to connect to %s: " + "couldn't connect to any host: %s", hostname, strerror(errno)); bad: close(fd4); close(fd6); return -1;