Socket: Use SO_REUSEADDR, disable SO_LINGER
Use these to avoid "socket in use" errors when restarting a DAP that uses the same port.
diff --git a/src/socket.cpp b/src/socket.cpp
index b23a3de..5cb8861 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -74,6 +74,21 @@
if (info) {
auto socket =
::socket(info->ai_family, info->ai_socktype, info->ai_protocol);
+
+#if !defined(_WIN32)
+ // Prevent sockets lingering after process termination, causing
+ // reconnection issues on the same port.
+
+ int enable = 1;
+ setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int));
+
+ struct {
+ int l_onoff; /* linger active */
+ int l_linger; /* how many seconds to linger for */
+ } linger = {false, 0};
+ setsockopt(socket, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger));
+#endif // !defined(_WIN32)
+
return std::make_shared<Shared>(info, socket);
}