version 1.56, 2004/07/20 03:50:25 |
version 1.57, 2004/09/16 04:39:16 |
|
|
char * |
char * |
hookup(char *host, char *port) |
hookup(char *host, char *port) |
{ |
{ |
int s, len, tos, error; |
int s, tos, error; |
static char hostnamebuf[MAXHOSTNAMELEN]; |
static char hostnamebuf[MAXHOSTNAMELEN]; |
struct addrinfo hints, *res, *res0; |
struct addrinfo hints, *res, *res0; |
char hbuf[NI_MAXHOST]; |
char hbuf[NI_MAXHOST]; |
char *cause = "unknown"; |
char *cause = "unknown"; |
|
socklen_t namelen; |
|
|
epsv4bad = 0; |
epsv4bad = 0; |
|
|
|
|
return 0; |
return 0; |
} |
} |
memcpy(&hisctladdr, res->ai_addr, res->ai_addrlen); |
memcpy(&hisctladdr, res->ai_addr, res->ai_addrlen); |
len = res->ai_addrlen; |
namelen = res->ai_addrlen; |
freeaddrinfo(res0); |
freeaddrinfo(res0); |
res0 = res = NULL; |
res0 = res = NULL; |
if (getsockname(s, (struct sockaddr *)&myctladdr, &len) < 0) { |
if (getsockname(s, (struct sockaddr *)&myctladdr, &namelen) < 0) { |
warn("getsockname"); |
warn("getsockname"); |
code = -1; |
code = -1; |
goto bad; |
goto bad; |
|
|
return ((char *)0); |
return ((char *)0); |
} |
} |
|
|
|
/* ARGSUSED */ |
void |
void |
cmdabort(int notused) |
cmdabort(int signo) |
{ |
{ |
|
|
alarmtimer(0); |
alarmtimer(0); |
|
|
|
|
jmp_buf sendabort; |
jmp_buf sendabort; |
|
|
|
/* ARGSUSED */ |
void |
void |
abortsend(int notused) |
abortsend(int signo) |
{ |
{ |
|
|
alarmtimer(0); |
alarmtimer(0); |
|
|
|
|
jmp_buf recvabort; |
jmp_buf recvabort; |
|
|
|
/* ARGSUSED */ |
void |
void |
abortrecv(int notused) |
abortrecv(int signo) |
{ |
{ |
|
|
alarmtimer(0); |
alarmtimer(0); |
|
|
} |
} |
errno = d = 0; |
errno = d = 0; |
while ((c = read(fileno(din), buf, bufsize)) > 0) { |
while ((c = read(fileno(din), buf, bufsize)) > 0) { |
size_t wr; |
ssize_t wr; |
size_t rd = c; |
size_t rd = c; |
|
|
d = 0; |
d = 0; |
|
|
initconn(void) |
initconn(void) |
{ |
{ |
char *p, *a; |
char *p, *a; |
int result = ERROR, len, tmpno = 0; |
int result = ERROR, tmpno = 0; |
int on = 1; |
int on = 1; |
int error; |
int error; |
u_int addr[16], port[2]; |
u_int addr[16], port[2]; |
u_int af, hal, pal; |
u_int af, hal, pal; |
char *pasvcmd = NULL; |
char *pasvcmd = NULL; |
|
socklen_t namelen; |
|
|
if (myctladdr.su_family == AF_INET6 |
if (myctladdr.su_family == AF_INET6 |
&& (IN6_IS_ADDR_LINKLOCAL(&myctladdr.su_sin6.sin6_addr) |
&& (IN6_IS_ADDR_LINKLOCAL(&myctladdr.su_sin6.sin6_addr) |
|
|
setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, |
setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, |
sizeof(on)) < 0) |
sizeof(on)) < 0) |
warn("setsockopt (ignored)"); |
warn("setsockopt (ignored)"); |
len = sizeof(data_addr); |
namelen = sizeof(data_addr); |
if (getsockname(data, (struct sockaddr *)&data_addr, &len) < 0) { |
if (getsockname(data, (struct sockaddr *)&data_addr, &namelen) < 0) { |
warn("getsockname"); |
warn("getsockname"); |
goto bad; |
goto bad; |
} |
} |
|
|
dataconn(const char *lmode) |
dataconn(const char *lmode) |
{ |
{ |
union sockunion from; |
union sockunion from; |
int s, fromlen = myctladdr.su_len; |
socklen_t fromlen = myctladdr.su_len; |
|
int s; |
|
|
if (passivemode) |
if (passivemode) |
return (fdopen(data, lmode)); |
return (fdopen(data, lmode)); |
|
|
return (fdopen(data, lmode)); |
return (fdopen(data, lmode)); |
} |
} |
|
|
|
/* ARGSUSED */ |
void |
void |
psummary(int notused) |
psummary(int signo) |
{ |
{ |
int save_errno = errno; |
int save_errno = errno; |
|
|
|
|
errno = save_errno; |
errno = save_errno; |
} |
} |
|
|
|
/* ARGSUSED */ |
void |
void |
psabort(int notused) |
psabort(int signo) |
{ |
{ |
|
|
alarmtimer(0); |
alarmtimer(0); |
|
|
} |
} |
} |
} |
|
|
|
/* ARGSUSED */ |
void |
void |
abortpt(int notused) |
abortpt(int signo) |
{ |
{ |
|
|
alarmtimer(0); |
alarmtimer(0); |
|
|
(void)signal(SIGINT, oldintr); |
(void)signal(SIGINT, oldintr); |
} |
} |
|
|
|
/* ARGSUSED */ |
void |
void |
reset(int argc, char *argv[]) |
reset(int argc, char *argv[]) |
{ |
{ |