ntohs(cs->serv_addr.sin_port),strerror(errno));
if (setsockopt(cs->fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {
- tlog(TL_CRIT|TL_EXIT, "socketsockopt failed: %s (d%)", strerror(errno), errno);
+ tlog(TL_CRIT|TL_EXIT, "socketsockopt failed: %s (%d)", strerror(errno), errno);
return CS_ERROR;
}
memset(sc, 0, sizeof(TC_Connection));
sc->serv_addr.sin_family = AF_INET;
sc->serv_addr.sin_addr.s_addr = (name) ? inet_addr(name) : htonl(INADDR_ANY);
+ if ( sc->serv_addr.sin_addr.s_addr == INADDR_NONE ) {
+ struct hostent *host;
+
+ /*
+ * Can't parse address: it's a DNS Name
+ */
+ host = gethostbyname(name);
+ if ( host && host->h_addrtype == AF_INET ) {
+ memcpy(&sc->serv_addr.sin_addr.s_addr, host->h_addr_list[0],
+ sizeof(&sc->serv_addr.sin_addr.s_addr));
+ } else {
+#ifdef HAVE_HSTRERROR
+ tlog(TL_CRIT,"gethostbyname: %s - %s", name, hstrerror(h_errno));
+#else
+ tlog(TL_CRIT,"gethostbyname: %s - %s", name, strerror(errno));
+#endif
+ sc->state = CS_ERROR;
+ return sc;
+ }
+ }
+
sc->serv_addr.sin_port = htons(port);
sc->state = CS_NOTINITED;
return sc;