diff --git a/src/fd_control.c b/src/fd_control.c
index 2e9295657ff98bb5cb8f3a8be1afc041baf8d917..14c014daa56974e8729fb3ec788fec1c64969474 100644
--- a/src/fd_control.c
+++ b/src/fd_control.c
@@ -227,7 +227,7 @@ PMOD_EXPORT int set_close_on_exec(int fd, int which)
 #ifndef HAVE_ACCEPT4
 int accept4(int fd, struct sockaddr *addr, ACCEPT_SIZE_T *addrlen, int flags)
 {
-  int fd = fd_accept(fd, addr, addrlen);
+  fd = fd_accept(fd, addr, addrlen);
   if (!flags || (fd < 0)) return fd;
   if (((flags & SOCK_NONBLOCK) && (set_nonblocking(fd, 1) < 0)) ||
       ((flags & SOCK_CLOEXEC) && (set_close_on_exec(fd, 1) < 0))) {
diff --git a/src/fd_control.h b/src/fd_control.h
index f1f0d35830bf0166d3f4d0219ba4563a6a5b7c90..1853722648a610181eb2341c29bbe0b95a315500 100644
--- a/src/fd_control.h
+++ b/src/fd_control.h
@@ -8,6 +8,10 @@
 #define FD_CONTROL_H
 
 #ifndef HAVE_ACCEPT4
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
 /* NB: The default values are compatible with Linux,
  *     but should work on other OSs as well, since
  *     accept4(2) is emulated by us anyway.
@@ -44,7 +48,7 @@ void do_close_on_exec(void);
 void cleanup_close_on_exec(void);
 #endif /* HAVE_BROKEN_F_SETFD */
 #ifndef HAVE_ACCEPT4
-int accept4(int fd, struct sockaddr *addr, ACCEPT_SIZE_T *addrlen, int flags)
+int accept4(int fd, struct sockaddr *addr, ACCEPT_SIZE_T *addrlen, int flags);
 #endif /* !HAVE_ACCEPT4 */
 /* Prototypes end here */