MEDIUM: connection: centralize handling of nolinger in fd management
Right now we see many places doing their own setsockopt(SO_LINGER).
Better only do it just before the close() in fd_delete(). For this
we add a new flag on the file descriptor, indicating if it's safe or
not to linger. If not (eg: after a connect()), then the setsockopt()
call is automatically performed before a close().
The flag automatically turns to safe when receiving a read0.
diff --git a/include/types/fd.h b/include/types/fd.h
index 56a8c5c..701edfc 100644
--- a/include/types/fd.h
+++ b/include/types/fd.h
@@ -74,6 +74,7 @@
unsigned char ev; /* event seen in return of poll() : FD_POLL_* */
unsigned char new:1; /* 1 if this fd has just been created */
unsigned char updated:1; /* 1 if this fd is already in the update list */
+ unsigned char linger_risk:1; /* 1 if we must kill lingering before closing */
};
/* less often used information */