0.95.12 develop 1, a lot of systems calls changed to universal IPv4/IPv6 functions
This commit is contained in:
97
lib/nntp.c
97
lib/nntp.c
@@ -32,19 +32,15 @@
|
||||
#include "mbinet.h"
|
||||
|
||||
|
||||
static int nntpsock = -1; /* TCP/IP socket */
|
||||
struct hostent *nhp; /* Host info remote */
|
||||
struct servent *nsp; /* Service information */
|
||||
struct sockaddr_in nntp_loc; /* For local socket address */
|
||||
struct sockaddr_in nntp_rem; /* For remote socket address */
|
||||
|
||||
static int nntpsock = -1; /* TCP/IP socket */
|
||||
|
||||
|
||||
|
||||
int nntp_connect(void)
|
||||
{
|
||||
socklen_t addrlen;
|
||||
char *p;
|
||||
char *q, *ipver = NULL, ipstr[INET6_ADDRSTRLEN], servport[10];
|
||||
struct addrinfo hints, *res = NULL, *p;
|
||||
int rc;
|
||||
|
||||
if (nntpsock != -1)
|
||||
return nntpsock;
|
||||
@@ -54,46 +50,57 @@ int nntp_connect(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
Syslog('+', "NNTP: connecting host: %s:%d", CFG.nntpnode, CFG.nntpport);
|
||||
memset(&nntp_loc, 0, sizeof(struct sockaddr_in));
|
||||
memset(&nntp_rem, 0, sizeof(struct sockaddr_in));
|
||||
snprintf(servport, 9, "%d", CFG.nntpport);
|
||||
Syslog('+', "NNTP: connecting host: %s port %s", CFG.nntpnode, servport);
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
|
||||
nntp_rem.sin_family = AF_INET;
|
||||
|
||||
if ((nhp = gethostbyname(CFG.nntpnode)) == NULL) {
|
||||
WriteError("NNTP: can't find host %s", CFG.nntpnode);
|
||||
return -1;
|
||||
if ((rc = getaddrinfo(CFG.popnode, servport, &hints, &res)) != 0) {
|
||||
WriteError("getaddrinfo %s:%s %s\n", CFG.popnode, servport, gai_strerror(rc));
|
||||
return -1;
|
||||
}
|
||||
|
||||
nntp_rem.sin_addr.s_addr = ((struct in_addr *)(nhp->h_addr))->s_addr;
|
||||
nntp_rem.sin_port = htons(CFG.nntpport);
|
||||
for (p = res; p != NULL; p = p->ai_next) {
|
||||
void *addr;
|
||||
|
||||
if ((nntpsock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
|
||||
WriteError("$NNTP: unable to create tcp socket");
|
||||
return -1;
|
||||
if (p->ai_family == AF_INET) {
|
||||
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
|
||||
addr = &(ipv4->sin_addr);
|
||||
ipver = (char *)"IPv4";
|
||||
} else {
|
||||
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
|
||||
addr = &(ipv6->sin6_addr);
|
||||
ipver = (char *)"IPv6";
|
||||
}
|
||||
inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
|
||||
Syslog('+', "Trying %s %s port %s", ipver, ipstr, servport);
|
||||
|
||||
if ((nntpsock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
|
||||
WriteError("$socket()");
|
||||
return -1;
|
||||
} else {
|
||||
if (connect(nntpsock, p->ai_addr, p->ai_addrlen) == -1) {
|
||||
WriteError("$connect %s port %s", ipstr, servport);
|
||||
close(nntpsock);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (p == NULL) {
|
||||
return -1; /* Not connected */
|
||||
}
|
||||
|
||||
if (connect(nntpsock, (struct sockaddr *)&nntp_rem, sizeof(struct sockaddr_in)) == -1) {
|
||||
WriteError("$NNTP: cannot connect tcp socket");
|
||||
return -1;
|
||||
}
|
||||
|
||||
addrlen = sizeof(struct sockaddr_in);
|
||||
|
||||
if (getsockname(nntpsock, (struct sockaddr *)&nntp_loc, &addrlen) == -1) {
|
||||
WriteError("$NNTP: unable to read socket address");
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = nntp_receive();
|
||||
if (strlen(p) == 0) {
|
||||
q = nntp_receive();
|
||||
if (strlen(q) == 0) {
|
||||
WriteError("NNTP: no response");
|
||||
nntp_close();
|
||||
return -1;
|
||||
}
|
||||
Syslog('+', "NNTP: %s", p);
|
||||
Syslog('+', "NNTP: %s", q);
|
||||
|
||||
if ((strncmp(p, "480", 3) == 0) || CFG.nntpforceauth) {
|
||||
if ((strncmp(q, "480", 3) == 0) || CFG.nntpforceauth) {
|
||||
/*
|
||||
* Must login with username and password
|
||||
*/
|
||||
@@ -102,8 +109,8 @@ int nntp_connect(void)
|
||||
nntp_close();
|
||||
return -1;
|
||||
}
|
||||
} else if (strncmp(p, "200", 3)) {
|
||||
WriteError("NNTP: bad response: %s", p);
|
||||
} else if (strncmp(q, "200", 3)) {
|
||||
WriteError("NNTP: bad response: %s", q);
|
||||
// nntp_close(); FIXME: Don't close, the other end might have done that already
|
||||
// If we do also, this program hangs. Must be fixed!
|
||||
return -1;
|
||||
@@ -112,20 +119,20 @@ int nntp_connect(void)
|
||||
if (CFG.modereader) {
|
||||
Syslog('+', "NNTP: setting mode reader");
|
||||
nntp_send((char *)"MODE READER\r\n");
|
||||
p = nntp_receive();
|
||||
Syslog('+', "NNTP: %s", p);
|
||||
if (strncmp(p, "480", 3) == 0) {
|
||||
q = nntp_receive();
|
||||
Syslog('+', "NNTP: %s", q);
|
||||
if (strncmp(q, "480", 3) == 0) {
|
||||
/*
|
||||
* Must login with username and password
|
||||
*/
|
||||
Syslog('+', "NNTP: %s", p);
|
||||
Syslog('+', "NNTP: %s", q);
|
||||
if (nntp_auth() == FALSE) {
|
||||
WriteError("NNTP: authorisation failure");
|
||||
nntp_close();
|
||||
return -1;
|
||||
}
|
||||
} else if (strncmp(p, "200", 3)) {
|
||||
WriteError("NNTP: bad response: %s", p);
|
||||
} else if (strncmp(q, "200", 3)) {
|
||||
WriteError("NNTP: bad response: %s", q);
|
||||
nntp_close();
|
||||
return -1;
|
||||
}
|
||||
|
124
lib/pop3.c
124
lib/pop3.c
@@ -1,10 +1,9 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $Id: pop3.c,v 1.8 2007/08/25 15:29:14 mbse Exp $
|
||||
* Purpose ...............: MBSE BBS Internet Library
|
||||
*
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1997-2004
|
||||
* Copyright (C) 1997-2011
|
||||
*
|
||||
* Michiel Broek FIDO: 2:280/2802
|
||||
* Beekmansbos 10
|
||||
@@ -33,81 +32,78 @@
|
||||
#include "mbinet.h"
|
||||
|
||||
|
||||
static int pop3sock = -1; /* TCP/IP socket */
|
||||
struct hostent *php; /* Host info remote */
|
||||
struct servent *psp; /* Service information */
|
||||
struct sockaddr_in pop3_loc; /* For local socket address */
|
||||
struct sockaddr_in pop3_rem; /* For remote socket address */
|
||||
static int pop3sock = -1; /* TCP/IP socket */
|
||||
|
||||
|
||||
|
||||
int pop3_connect(void)
|
||||
{
|
||||
socklen_t addrlen;
|
||||
char *p;
|
||||
char *q, *ipver = NULL, ipstr[INET6_ADDRSTRLEN];
|
||||
struct addrinfo hints, *res = NULL, *p;
|
||||
int rc;
|
||||
|
||||
if (!strlen(CFG.popnode)) {
|
||||
WriteError("POP3: host not configured");
|
||||
return -1;
|
||||
if (!strlen(CFG.popnode)) {
|
||||
WriteError("POP3: host not configured");
|
||||
return -1;
|
||||
}
|
||||
|
||||
Syslog('+', "POP3: connecting host: %s", CFG.popnode);
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
|
||||
if ((rc = getaddrinfo(CFG.popnode, "pop3", &hints, &res)) != 0) {
|
||||
WriteError("getaddrinfo %s: %s\n", CFG.popnode, gai_strerror(rc));
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (p = res; p != NULL; p = p->ai_next) {
|
||||
void *addr;
|
||||
|
||||
if (p->ai_family == AF_INET) {
|
||||
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
|
||||
addr = &(ipv4->sin_addr);
|
||||
ipver = (char *)"IPv4";
|
||||
} else {
|
||||
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
|
||||
addr = &(ipv6->sin6_addr);
|
||||
ipver = (char *)"IPv6";
|
||||
}
|
||||
inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
|
||||
Syslog('+', "Trying %s %s port pop3", ipver, ipstr);
|
||||
|
||||
Syslog('+', "POP3: connecting host: %s", CFG.popnode);
|
||||
memset(&pop3_loc, 0, sizeof(struct sockaddr_in));
|
||||
memset(&pop3_rem, 0, sizeof(struct sockaddr_in));
|
||||
|
||||
pop3_rem.sin_family = AF_INET;
|
||||
|
||||
if ((php = gethostbyname(CFG.popnode)) == NULL) {
|
||||
WriteError("POP3: can't find host %s", CFG.popnode);
|
||||
return -1;
|
||||
if ((pop3sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
|
||||
WriteError("$socket()");
|
||||
return -1;
|
||||
} else {
|
||||
if (connect(pop3sock, p->ai_addr, p->ai_addrlen) == -1) {
|
||||
WriteError("$connect %s port pop3", ipstr);
|
||||
close(pop3sock);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (p == NULL) {
|
||||
return -1; /* Not connected */
|
||||
}
|
||||
|
||||
pop3_rem.sin_addr.s_addr = ((struct in_addr *)(php->h_addr))->s_addr;
|
||||
q = pop3_receive();
|
||||
if (strlen(q) == 0) {
|
||||
WriteError("POP3: no response from server");
|
||||
pop3_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((psp = getservbyname("pop3", "tcp")) == NULL) {
|
||||
/*
|
||||
* RedHat doesn't follow IANA specs and uses pop-3 in /etc/services
|
||||
*/
|
||||
if ((psp = getservbyname("pop-3", "tcp")) == NULL) {
|
||||
WriteError("POP3: can't find service port for pop3/tcp");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
pop3_rem.sin_port = psp->s_port;
|
||||
if (strncmp(q, "+OK", 3)) {
|
||||
WriteError("POP3: bad response: %s", q);
|
||||
pop3_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((pop3sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
|
||||
WriteError("$POP3: unable to create tcp socket");
|
||||
return -1;
|
||||
}
|
||||
Syslog('+', "POP3: %s", q);
|
||||
|
||||
if (connect(pop3sock, (struct sockaddr *)&pop3_rem, sizeof(struct sockaddr_in)) == -1) {
|
||||
WriteError("$POP3: cannot connect tcp socket");
|
||||
return -1;
|
||||
}
|
||||
|
||||
addrlen = sizeof(struct sockaddr_in);
|
||||
|
||||
if (getsockname(pop3sock, (struct sockaddr *)&pop3_loc, &addrlen) == -1) {
|
||||
WriteError("$POP3: unable to read socket address");
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = pop3_receive();
|
||||
if (strlen(p) == 0) {
|
||||
WriteError("POP3: no response from server");
|
||||
pop3_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (strncmp(p, "+OK", 3)) {
|
||||
WriteError("POP3: bad response: %s", p);
|
||||
pop3_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
Syslog('+', "POP3: %s", p);
|
||||
|
||||
return pop3sock;
|
||||
return pop3sock;
|
||||
}
|
||||
|
||||
|
||||
|
147
lib/smtp.c
147
lib/smtp.c
@@ -1,10 +1,9 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $Id: smtp.c,v 1.10 2007/08/25 15:29:14 mbse Exp $
|
||||
* Purpose ...............: MBSE BBS Internet Library
|
||||
*
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1997-2005
|
||||
* Copyright (C) 1997-2011
|
||||
*
|
||||
* Michiel Broek FIDO: 2:280/2802
|
||||
* Beekmansbos 10
|
||||
@@ -34,84 +33,86 @@
|
||||
|
||||
|
||||
static int smtpsock = -1; /* TCP/IP socket */
|
||||
struct hostent *shp; /* Host info remote */
|
||||
struct servent *ssp; /* Service information */
|
||||
struct sockaddr_in smtp_loc; /* For local socket address */
|
||||
struct sockaddr_in smtp_rem; /* For remote socket address */
|
||||
|
||||
|
||||
|
||||
int smtp_connect(void)
|
||||
{
|
||||
socklen_t addrlen;
|
||||
char *p, temp[40];
|
||||
|
||||
if (smtpsock != -1)
|
||||
return smtpsock;
|
||||
|
||||
if (!strlen(CFG.smtpnode)) {
|
||||
WriteError("SMTP: host not configured");
|
||||
return -1;
|
||||
}
|
||||
|
||||
Syslog('+', "SMTP: connecting host: %s", CFG.smtpnode);
|
||||
memset(&smtp_loc, 0, sizeof(struct sockaddr_in));
|
||||
memset(&smtp_rem, 0, sizeof(struct sockaddr_in));
|
||||
|
||||
smtp_rem.sin_family = AF_INET;
|
||||
|
||||
if ((shp = gethostbyname(CFG.smtpnode)) == NULL) {
|
||||
WriteError("SMTP: can't find host %s", CFG.smtpnode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
smtp_rem.sin_addr.s_addr = ((struct in_addr *)(shp->h_addr))->s_addr;
|
||||
|
||||
if ((ssp = getservbyname("smtp", "tcp")) == NULL) {
|
||||
WriteError("SMTP: can't find service port for smtp/tcp");
|
||||
return -1;
|
||||
}
|
||||
smtp_rem.sin_port = ssp->s_port;
|
||||
|
||||
if ((smtpsock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
|
||||
WriteError("$SMTP: unable to create tcp socket");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (connect(smtpsock, (struct sockaddr *)&smtp_rem, sizeof(struct sockaddr_in)) == -1) {
|
||||
WriteError("$SMTP: can't connect tcp socket");
|
||||
return -1;
|
||||
}
|
||||
|
||||
addrlen = sizeof(struct sockaddr_in);
|
||||
|
||||
if (getsockname(smtpsock, (struct sockaddr *)&smtp_loc, &addrlen) == -1) {
|
||||
WriteError("$SMTP: unable to read socket address");
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = smtp_receive();
|
||||
if (strlen(p) == 0) {
|
||||
WriteError("SMTP: no response");
|
||||
smtp_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (strncmp(p, "220", 3)) {
|
||||
WriteError("SMTP: bad response: %s", p);
|
||||
smtp_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
Syslog('+', "SMTP: %s", p);
|
||||
|
||||
snprintf(temp, 40, "HELO %s\r\n", CFG.sysdomain);
|
||||
if (smtp_cmd(temp, 250)) {
|
||||
smtp_close();
|
||||
return -1;
|
||||
}
|
||||
char *q, *ipver = NULL, ipstr[INET6_ADDRSTRLEN], temp[41];
|
||||
struct addrinfo hints, *res = NULL, *p;
|
||||
int rc;
|
||||
|
||||
if (smtpsock != -1)
|
||||
return smtpsock;
|
||||
|
||||
if (!strlen(CFG.smtpnode)) {
|
||||
WriteError("SMTP: host not configured");
|
||||
return -1;
|
||||
}
|
||||
|
||||
Syslog('+', "SMTP: connecting host: %s", CFG.smtpnode);
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
|
||||
if ((rc = getaddrinfo(CFG.popnode, "smtp", &hints, &res)) != 0) {
|
||||
WriteError("getaddrinfo %s: %s\n", CFG.popnode, gai_strerror(rc));
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (p = res; p != NULL; p = p->ai_next) {
|
||||
void *addr;
|
||||
|
||||
if (p->ai_family == AF_INET) {
|
||||
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
|
||||
addr = &(ipv4->sin_addr);
|
||||
ipver = (char *)"IPv4";
|
||||
} else {
|
||||
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
|
||||
addr = &(ipv6->sin6_addr);
|
||||
ipver = (char *)"IPv6";
|
||||
}
|
||||
inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
|
||||
Syslog('+', "Trying %s %s port pop3", ipver, ipstr);
|
||||
|
||||
if ((smtpsock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
|
||||
WriteError("$socket()");
|
||||
return -1;
|
||||
} else {
|
||||
if (connect(smtpsock, p->ai_addr, p->ai_addrlen) == -1) {
|
||||
WriteError("$connect %s port pop3", ipstr);
|
||||
close(smtpsock);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (p == NULL) {
|
||||
return -1; /* Not connected */
|
||||
}
|
||||
|
||||
q = smtp_receive();
|
||||
if (strlen(q) == 0) {
|
||||
WriteError("SMTP: no response");
|
||||
smtp_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (strncmp(q, "220", 3)) {
|
||||
WriteError("SMTP: bad response: %s", q);
|
||||
smtp_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
Syslog('+', "SMTP: %s", q);
|
||||
|
||||
snprintf(temp, 40, "HELO %s\r\n", CFG.sysdomain);
|
||||
if (smtp_cmd(temp, 250)) {
|
||||
smtp_close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
return smtpsock;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,10 +1,9 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $Id: virscan.c,v 1.3 2008/02/25 12:11:42 mbse Exp $
|
||||
* Purpose ...............: Scan a file for virusses
|
||||
*
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1997-2008
|
||||
* Copyright (C) 1997-2011
|
||||
*
|
||||
* Michiel Broek FIDO: 2:280/2802
|
||||
* Beekmansbos 10
|
||||
@@ -43,43 +42,55 @@ extern pid_t mypid;
|
||||
* 1 = Virus found.
|
||||
* 2 = Internal error.
|
||||
*/
|
||||
int clam_stream_check(char *server, char *port, char *filename)
|
||||
int clam_stream_check(char *servname, char *servport, char *filename)
|
||||
{
|
||||
struct sockaddr_in sa_in;
|
||||
struct addrinfo hints, *res;
|
||||
struct addrinfo hints, *res = NULL, *p;
|
||||
int s, ss, buf_len = 0, err;
|
||||
char buf[1024], *buf_c, *port_s;
|
||||
char buf[1024], *buf_c, *port_s, *ipver = NULL, ipstr[INET6_ADDRSTRLEN];
|
||||
FILE *fp;
|
||||
|
||||
Syslog('f', "clam_stream_check(%s, %s, %s)", server, port, filename);
|
||||
Syslog('f', "clam_stream_check(%s, %s, %s)", servname, servport, filename);
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = PF_INET;
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
|
||||
if ((err = getaddrinfo(server, port, &hints, &res)) != 0) {
|
||||
WriteError("getaddrinfo(%s:%s): %s\n", server, port, gai_strerror(err));
|
||||
if ((err = getaddrinfo(servname, servport, &hints, &res)) != 0) {
|
||||
WriteError("getaddrinfo(%s:%s): %s\n", servname, servport, gai_strerror(err));
|
||||
return 2;
|
||||
}
|
||||
|
||||
while (res) {
|
||||
s = socket(PF_INET, SOCK_STREAM, 0);
|
||||
if (s == -1) {
|
||||
for (p = res; p != NULL; p = p->ai_next) {
|
||||
void *addr;
|
||||
|
||||
if (p->ai_family == AF_INET) {
|
||||
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
|
||||
addr = &(ipv4->sin_addr);
|
||||
ipver = (char *)"IPv4";
|
||||
} else {
|
||||
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
|
||||
addr = &(ipv6->sin6_addr);
|
||||
ipver = (char *)"IPv6";
|
||||
}
|
||||
inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
|
||||
Syslog('+', "Trying %s %s port %s", ipver, ipstr, servport);
|
||||
|
||||
if ((s = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
|
||||
WriteError("$socket()");
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (connect(s, res->ai_addr, sizeof(struct sockaddr)) == -1) {
|
||||
struct sockaddr_in *sa = (struct sockaddr_in *)res->ai_addr;
|
||||
WriteError("$connect(%s:%d)", inet_ntoa(sa->sin_addr), (int)ntohs(sa->sin_port));
|
||||
res = res->ai_next;
|
||||
if (connect(s, p->ai_addr, p->ai_addrlen) == -1) {
|
||||
WriteError("$connect %s port %s", ipstr, servport);
|
||||
p = p->ai_next;
|
||||
close(s);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (res == NULL) {
|
||||
WriteError("unable to connect to %s", server);
|
||||
if (p == NULL) {
|
||||
WriteError("unable to connect to %s", servname);
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user