]> Kevux Git Server - fll/commitdiff
Update: Only clear socket id when fast closing and update documentation.
authorKevin Day <thekevinday@gmail.com>
Thu, 6 Jan 2022 00:05:43 +0000 (18:05 -0600)
committerKevin Day <thekevinday@gmail.com>
Thu, 6 Jan 2022 00:05:43 +0000 (18:05 -0600)
level_0/f_socket/c/socket.c
level_0/f_socket/c/socket.h

index f173422329913c511a7e752ae6d6236d3ae4efc7..107b3b124ba73919db1958aa9d33e7460b6bbb51 100644 (file)
@@ -228,7 +228,9 @@ extern "C" {
       return F_status_set_error(F_failure);
     }
 
-    socket->id = -1;
+    if (action == f_socket_close_fast_e) {
+      socket->id = -1;
+    }
 
     return F_none;
   }
index 23e4acb0e04f5fa244163d73b6bc4a0621dc1ee0..a6b6830a16f7e4722d5329696b35266c30f5d111 100644 (file)
@@ -258,7 +258,21 @@ extern "C" {
 /**
  * Terminate a socket connection.
  *
- * To properly close a UNIX socket, call f_file_close() and f_file_remove().
+ * The shutdown() call is used for all actions, except f_socket_close_fast_e.
+ * When shutdown() is called, a proper network disconnection process is initiated.
+ * The network connection will properly send the FIN packets.
+ * The shutdown() also allows current buffers to be properly flushed.
+ * The file descriptor is not closed.
+ * The remaining buffer can still be processed.
+ * Be sure to call either this function again with f_socket_close_fast_e or call f_file_close() directly.
+ *
+ * When action is f_socket_close_fast_e, then close() is called.
+ * What happens then is that rather than waiting for FIN a RST is immediately sent (RST is sent only if connection is still active).
+ * All buffers are discarded.
+ * The connection is immediately removed.
+ * Thus, f_socket_close_fast_e (calling close()) on a socket results in bad network practice.
+ *
+ * In the above cases, whether or not a RST or FIN are sent is also dependent on whether the f_socket_option_linger_d is used (SO_LINGER).
  *
  * @param socket
  *   The socket structure.