AI->ai_socktype = sock_type;
AI->ai_protocol = proto;
debugs(50, 3, "comm_openex: Attempt fallback open socket for: " << addr );
- new_socket = socket(AI->ai_family, AI->ai_socktype, AI->ai_protocol);
+ new_socket = socket(AI->ai_family, AI->ai_socktype, AI->ai_protocol);
debugs(50, 2, HERE << "attempt open " << note << " socket on: " << addr);
}
#endif
if (squid_curtime - connstart > Config.Timeout.connect)
return 0;
} else {
- if (tries > addrcount)
+ if (tries > addrcount) {
+ /* Flush bad address count in case we are
+ * skipping over incompatible protocol
+ */
+ ipcacheMarkAllGood(host);
return 0;
+ }
}
return commResetFD();
ipcacheCycleAddr(name, ia);
}
+/// \ingroup IPCacheAPI
+void
+ipcacheMarkAllGood(const char *name)
+{
+ ipcache_entry *i;
+ ipcache_addrs *ia;
+ int k;
+
+ if ((i = ipcache_get(name)) == NULL)
+ return;
+
+ ia = &i->addrs;
+
+ /* All bad, reset to All good */
+ debugs(14, 3, "ipcacheMarkAllGood: Changing ALL " << name << " addrs to OK (" << ia->badcount << "/" << ia->count << " bad)");
+
+ for (k = 0; k < ia->count; k++)
+ ia->bad_mask[k] = 0;
+
+ ia->badcount = 0;
+}
+
/// \ingroup IPCacheAPI
void
ipcacheMarkGoodAddr(const char *name, const Ip::Address &addr)
SQUIDCEXTERN void ipcacheCycleAddr(const char *name, ipcache_addrs *);
SQUIDCEXTERN void ipcacheMarkBadAddr(const char *name, const Ip::Address &);
SQUIDCEXTERN void ipcacheMarkGoodAddr(const char *name, const Ip::Address &);
+SQUIDCEXTERN void ipcacheMarkAllGood(const char *name);
SQUIDCEXTERN void ipcacheFreeMemory(void);
SQUIDCEXTERN ipcache_addrs *ipcacheCheckNumeric(const char *name);
SQUIDCEXTERN void ipcache_restart(void);