summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2011-02-09 21:13:32 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2011-02-09 21:13:32 +0000
commitc97459721cd0302ad313837d856d9238cceb904f (patch)
tree0131b21b38032ad244cd84a9f8c8d5c3fc02d451
parentd6628b116ee6702a92ce289fc8bd5ddbdd1f804a (diff)
Set SO_KEEPALIVE on sockets. OK miod@. Also tested by landry@
"Makes sense" markus@ and "i don't see a reason not to" henning@
-rw-r--r--libexec/ftpd/ftpd.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c
index 61fb5a4f277..c4ed19f10cb 100644
--- a/libexec/ftpd/ftpd.c
+++ b/libexec/ftpd/ftpd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ftpd.c,v 1.192 2010/08/27 12:00:21 lum Exp $ */
+/* $OpenBSD: ftpd.c,v 1.193 2011/02/09 21:13:31 millert Exp $ */
/* $NetBSD: ftpd.c,v 1.15 1995/06/03 22:46:47 mycroft Exp $ */
/*
@@ -439,6 +439,13 @@ main(int argc, char *argv[])
if (fds[n] < 0)
continue;
+ if (setsockopt(fds[n], SOL_SOCKET, SO_KEEPALIVE,
+ &on, sizeof(on)) < 0) {
+ close(fds[n]);
+ fds[n] = -1;
+ continue;
+ }
+
if (setsockopt(fds[n], SOL_SOCKET, SO_REUSEADDR,
&on, sizeof(on)) < 0) {
close(fds[n]);
@@ -2240,7 +2247,7 @@ void
passive(void)
{
socklen_t len;
- int on;
+ int on = 1;
u_char *p, *a;
if (pw == NULL) {
@@ -2264,6 +2271,10 @@ passive(void)
return;
}
+ if (setsockopt(pdata, SOL_SOCKET, SO_KEEPALIVE,
+ &on, sizeof(on)) < 0)
+ goto pasv_error;
+
on = IP_PORTRANGE_HIGH;
if (setsockopt(pdata, IPPROTO_IP, IP_PORTRANGE,
&on, sizeof(on)) < 0)
@@ -2328,7 +2339,7 @@ void
long_passive(char *cmd, int pf)
{
socklen_t len;
- int on;
+ int on = 1;
u_char *p, *a;
if (!logged_in) {
@@ -2367,6 +2378,10 @@ long_passive(char *cmd, int pf)
return;
}
+ if (setsockopt(pdata, SOL_SOCKET, SO_KEEPALIVE,
+ &on, sizeof(on)) < 0)
+ goto pasv_error;
+
switch (ctrl_addr.su_family) {
case AF_INET:
on = IP_PORTRANGE_HIGH;