chiark / gitweb /
socket: Allow selection of TCP Congestion Avoidance algorithm to socket
[elogind.git] / src / socket.h
index 5a2cd06d9d66a761c2df62421c0bfd00d3e64a10..230dd200d5e423ebef41f869ec3f6555d5b0c0c1 100644 (file)
@@ -78,34 +78,49 @@ struct Socket {
 
         LIST_HEAD(SocketPort, ports);
 
-        /* Only for INET6 sockets: issue IPV6_V6ONLY sockopt */
-        SocketAddressBindIPv6Only bind_ipv6_only;
         unsigned backlog;
-
         usec_t timeout_usec;
 
         ExecCommand* exec_command[_SOCKET_EXEC_COMMAND_MAX];
         ExecContext exec_context;
 
+        /* For Accept=no sockets refers to the one service we'll
+        activate. For Accept=yes sockets is either NULL, or filled
+        when the next service we spawn. */
         Service *service;
 
         SocketState state, deserialized_state;
 
-        KillMode kill_mode;
-
         ExecCommand* control_command;
         SocketExecCommand control_command_id;
         pid_t control_pid;
 
-        char *bind_to_device;
-        mode_t directory_mode;
-        mode_t socket_mode;
-
         bool accept;
         unsigned n_accepted;
+        unsigned n_connections;
+        unsigned max_connections;
 
         bool failure;
         Watch timer_watch;
+
+        /* Socket options */
+        bool keep_alive;
+        int priority;
+        size_t receive_buffer;
+        size_t send_buffer;
+        int ip_tos;
+        int ip_ttl;
+        size_t pipe_size;
+        int mark;
+        bool free_bind;
+        char *bind_to_device;
+        char *tcp_congestion;
+
+        /* Only for INET6 sockets: issue IPV6_V6ONLY sockopt */
+        SocketAddressBindIPv6Only bind_ipv6_only;
+
+        mode_t directory_mode;
+        mode_t socket_mode;
 };
 
 /* Called from the service code when collecting fds */
@@ -118,6 +133,9 @@ void socket_notify_service_dead(Socket *s);
  * any of the sockets of this socket */
 int socket_add_one_mount_link(Socket *s, Mount *m);
 
+/* Called from the service code when a per-connection service ended */
+void socket_connection_unref(Socket *s);
+
 extern const UnitVTable socket_vtable;
 
 const char* socket_state_to_string(SocketState i);