You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2006/06/30 00:22:41 UTC
svn commit: r418149 - in /spamassassin/trunk: spamc/libspamc.c t/spamc_l.t
Author: jm
Date: Thu Jun 29 15:22:38 2006
New Revision: 418149
URL: http://svn.apache.org/viewvc?rev=418149&view=rev
Log:
cleanup spamc error handling and reduce ifdefs; fix a windows build failure due to misplaced format args in libspamc_log; log hostname in failure-to-connect messages again; log failures to connect for all failing interfaces for multihomed hosts, so that t/spamc_l.t will pass when there is no IPv6 interface but IPv6 is in the kernel
Modified:
spamassassin/trunk/spamc/libspamc.c
spamassassin/trunk/t/spamc_l.t
Modified: spamassassin/trunk/spamc/libspamc.c
URL: http://svn.apache.org/viewvc/spamassassin/trunk/spamc/libspamc.c?rev=418149&r1=418148&r2=418149&view=diff
==============================================================================
--- spamassassin/trunk/spamc/libspamc.c (original)
+++ spamassassin/trunk/spamc/libspamc.c Thu Jun 29 15:22:38 2006
@@ -78,6 +78,12 @@
#define h_errno errno
#endif
+#ifdef _WIN32
+#define spamc_get_errno() WSAGetLastError()
+#else
+#define spamc_get_errno() errno
+#endif
+
#ifndef HAVE_OPTARG
extern char *optarg;
#endif
@@ -187,7 +193,7 @@
static int _opensocket(int flags, struct addrinfo *res, int *psock)
{
const char *typename;
-
+ int origerr;
#ifdef _WIN32
int socktout;
#endif
@@ -225,18 +231,16 @@
== INVALID_SOCKET
#endif
) {
- int origerr;
/*--------------------------------------------------------
* At this point we had a failure creating the socket, and
* this is pretty much fatal. Translate the error reason
* into something the user can understand.
*/
+ origerr = spamc_get_errno();
#ifndef _WIN32
- origerr = errno; /* take a copy before syslog() */
libspamc_log(flags, LOG_ERR, "socket(%s) to spamd failed: %s", typename, strerror(origerr));
#else
- origerr = WSAGetLastError();
libspamc_log(flags, LOG_ERR, "socket(%s) to spamd failed: %d", typename, origerr);
#endif
@@ -265,16 +269,15 @@
if (type == PF_INET
&& setsockopt(*psock, SOL_SOCKET, SO_RCVTIMEO, (char *)&socktout, sizeof(socktout)) != 0)
{
- int origerrno;
- origerrno = WSAGetLastError();
- switch (origerrno)
+ origerr = spamc_get_errno();
+ switch (origerr)
{
case EBADF:
case ENOTSOCK:
case ENOPROTOOPT:
case EFAULT:
- libspamc_log(flags, LOG_ERR, "setsockopt(SO_RCVTIMEO) failed: %d", origerrno);
+ libspamc_log(flags, LOG_ERR, "setsockopt(SO_RCVTIMEO) failed: %d", origerr);
closesocket(*psock);
return EX_SOFTWARE;
@@ -294,12 +297,7 @@
if (type == PF_INET
&& setsockopt(*psock, 0, TCP_NODELAY, &one, sizeof one) != 0) {
- int origerrno;
-#ifndef _WIN32
- origerr = errno;
-#else
- origerrno = WSAGetLastError();
-#endif
+ origerr = spamc_get_errno();
switch (origerr) {
case EBADF:
case ENOTSOCK:
@@ -459,13 +457,20 @@
status = connect(mysock, res->ai_addr, res->ai_addrlen);
if (status != 0) {
+ origerr = spamc_get_errno();
+ closesocket(mysock);
+
#ifndef _WIN32
- origerr = errno;
+ libspamc_log(tp->flags, LOG_ERR,
+ "connect to spamd on %s failed, retrying (#%d of %d): %s",
+ host, numloops+1, MAX_CONNECT_RETRIES, strerror(origerr));
#else
- origerr = WSAGetLastError();
+ libspamc_log(tp->flags, LOG_ERR,
+ "connect to spamd on %s failed, retrying (#%d of %d): %d",
+ host, numloops+1, MAX_CONNECT_RETRIES, origerr);
#endif
- closesocket(mysock);
- } else {
+
+ } else {
#ifdef DO_CONNECT_DEBUG_SYSLOGS
libspamc_log(tp->flags, CONNECT_DEBUG_LEVEL,
"dbg: connect(%s) to spamd done",family);
@@ -477,16 +482,6 @@
res = res->ai_next;
}
sleep(CONNECT_RETRY_SLEEP);
-
-#ifndef _WIN32
- libspamc_log(tp->flags, LOG_ERR,
- "connect to spamd failed, retrying (#%d of %d): %s",
- numloops+1, MAX_CONNECT_RETRIES, strerror(origerr));
-#else
- libspamc_log(tp->flags, LOG_ERR,
- "connect to spamd on %s failed, retrying (#%d of %d): %s",
- family, host, numloops+1, MAX_CONNECT_RETRIES, origerr);
-#endif
} /* for(numloops...) */
for(numloops=0;numloops<tp->nhosts;numloops++) {
@@ -1575,7 +1570,7 @@
#endif
case TRANSPORT_LOCALHOST:
/* getaddrinfo(NULL) will look up the loopback address */
- if (origerr = getaddrinfo(NULL, port, &hints, &res)) {
+ if ((origerr = getaddrinfo(NULL, port, &hints, &res)) != 0) {
libspamc_log(flags, LOG_ERR,
"getaddrinfo(NULL) failed: %s",
gai_strerror(origerr));
Modified: spamassassin/trunk/t/spamc_l.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/spamc_l.t?rev=418149&r1=418148&r2=418149&view=diff
==============================================================================
--- spamassassin/trunk/t/spamc_l.t (original)
+++ spamassassin/trunk/t/spamc_l.t Thu Jun 29 15:22:38 2006
@@ -2,7 +2,7 @@
use lib '.'; use lib 't';
use SATest; sa_t_init("spamc_l");
-use Test; plan tests => ($NO_SPAMC_EXE ? 0 : 3),
+use Test; plan tests => ($NO_SPAMC_EXE ? 0 : 4),
onfail => sub { warn "FAIL: Some other process running on port 8? Test assumes nothing is listening on port 8." };
@@ -15,7 +15,8 @@
%patterns = (
q{ hello world }, 'spamc_l',
-q{ spamc: connect to spamd failed, retrying (#1 of 3): } . $errmsg, 'connfailed',
+q{ spamc: connect to spamd on }, 'connfailed_a',
+q{ failed, retrying (#1 of 3): } . $errmsg, 'connfailed_b',
);