send_common: Combine generic_com_on() and open_sender().
[paraslash.git] / send_common.c
index 988e8d48daf502bc70f0ba6cb7377dd1dc90429c..4bb50ce58d7198c4aaf6bdf456b2c5c04aaed442 100644 (file)
@@ -1,8 +1,4 @@
-/*
- * Copyright (C) 2005 Andre Noll <maan@tuebingen.mpg.de>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* Copyright (C) 2005 Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */
 
 /** \file send_common.c Functions used by more than one paraslash sender. */
 
 /** Clients will be kicked if there are more than that many bytes pending. */
 #define MAX_CQ_BYTES 40000
 
-/**
- * Open a passive socket of given layer4 type.
- *
- * Set the resulting file descriptor to nonblocking mode and add it to the list
- * of fds that are being closed in the child process when the server calls
- * fork().
- *
- * \param l4type The transport-layer protocol.
- * \param port The port number.
- *
- * \return The listening fd on success, negative on errors.
- */
-static int open_sender(unsigned l4type, int port)
-{
-       int fd, ret = para_listen_simple(l4type, port);
-
-       if (ret < 0)
-               return ret;
-       fd = ret;
-       ret = mark_fd_nonblocking(fd);
-       if (ret < 0) {
-               close(fd);
-               return ret;
-       }
-       add_close_on_fork_list(fd);
-       return fd;
-}
-
 /**
  * Shut down a client connected to a paraslash sender.
  *
@@ -72,7 +40,7 @@ static int open_sender(unsigned l4type, int port)
  * list, destroy the chunk queue of this client, delete the client from the
  * list of connected clients and free the sender_client struct.
  *
- * \sa shutdown_clients().
+ * \sa \ref shutdown_clients().
  */
 void shutdown_client(struct sender_client *sc, struct sender_status *ss)
 {
@@ -212,7 +180,7 @@ char *generic_sender_status(struct sender_status *ss, const char *name)
  * \param scd Contains the IP and the netmask.
  * \param ss The sender.
  *
- * \sa generic_com_deny().
+ * \sa \ref generic_com_deny().
  */
 void generic_com_allow(struct sender_command_data *scd,
                struct sender_status *ss)
@@ -226,7 +194,7 @@ void generic_com_allow(struct sender_command_data *scd,
  * \param scd see \ref generic_com_allow().
  * \param ss see \ref generic_com_allow().
  *
- * \sa generic_com_allow().
+ * \sa \ref generic_com_allow().
  */
 void generic_com_deny(struct sender_command_data *scd,
                struct sender_status *ss)
@@ -244,13 +212,20 @@ void generic_com_deny(struct sender_command_data *scd,
  */
 int generic_com_on(struct sender_status *ss, unsigned protocol)
 {
-       int ret;
+       int fd, ret;
 
        if (ss->listen_fd >= 0)
                return 1;
-       ret = open_sender(protocol, ss->port);
+       ret = para_listen_simple(protocol, ss->port);
        if (ret < 0)
                return ret;
+       fd = ret;
+       ret = mark_fd_nonblocking(fd);
+       if (ret < 0) {
+               close(fd);
+               return ret;
+       }
+       add_close_on_fork_list(fd);
        ss->listen_fd = ret;
        return 1;
 }
@@ -262,7 +237,7 @@ int generic_com_on(struct sender_status *ss, unsigned protocol)
  *
  * \param ss The sender to deactivate.
  *
- * \sa \ref del_close_on_fork_list(), shutdown_clients().
+ * \sa \ref del_close_on_fork_list(), \ref shutdown_clients().
  */
 void generic_com_off(struct sender_status *ss)
 {
@@ -281,9 +256,8 @@ void generic_com_off(struct sender_status *ss)
  * \param ss The sender whose listening fd is ready for reading.
  * \param rfds Passed to para_accept(),
  *
- * This must be called only if the socket fd of \a ss is ready for reading.  It
- * calls para_accept() to accept the connection and performs the following
- * actions on the resulting file descriptor \a fd:
+ * This calls para_accept() and performs the following actions on the resulting
+ * file descriptor fd:
  *
  *     - Checks whether the maximal number of connections are exceeded.
  *     - Sets \a fd to nonblocking mode.