libt2n: (tomj) fixed call of virtual function close() from destructor, fixed return...
[libt2n] / src / socket_handler.cpp
index 91d5899..288ec66 100644 (file)
@@ -55,6 +55,31 @@ socket_handler::socket_handler(int _sock, socket_type_value _socket_type)
 {
 }
 
+/**
+ * Destructor. Closes open socket
+ */
+socket_handler::~socket_handler()
+{
+    if (sock != -1)
+    {
+        shutdown(sock,SHUT_RDWR);
+        ::close(sock);
+
+        sock = -1;
+    }
+}
+
+/// close the underlying socket connection. Don't call directly, use the version provided
+/// by the connection class you are using.
+void socket_handler::close()
+{
+    LOGSTREAM(debug,"close connection");
+    // graceful shutdown
+    shutdown(sock,SHUT_RDWR);
+    ::close(sock);
+
+    sock = -1;
+}
 
 /// set options like fast reuse and keepalive every socket should have
 void socket_handler::set_socket_options(int sock)
@@ -90,16 +115,6 @@ void socket_handler::set_socket_options(int sock)
         EXCEPTIONSTREAM(error,t2n_communication_error,"fcntl error on socket: " << strerror(errno));
 }
 
-/// close the underlying socket connection. Don't call directly, use the version provided
-/// by the connection class you are using.
-void socket_handler::close()
-{
-    LOGSTREAM(debug,"close connection");
-    // graceful shutdown
-    shutdown(sock,SHUT_RDWR);
-    ::close(sock);
-}
-
 /// is the underlying socket connection still open?
 bool socket_handler::is_closed()
 {