]> git.tdb.fi Git - libs/net.git/blobdiff - source/socket.cpp
Remove the close method from Socket, making it more RAII
[libs/net.git] / source / socket.cpp
index c845471a58ed13d20608b4768e13879389370016..7bccec6de1303997f07883898ea947b99fd12ba4 100644 (file)
@@ -73,7 +73,16 @@ Socket::Socket(Family af, int type, int proto):
 
 Socket::~Socket()
 {
-       close();
+       signal_flush_required.emit();
+#ifdef WIN32
+       closesocket(handle);
+       CloseHandle(event);
+#else
+       ::close(handle);
+#endif
+
+       delete local_addr;
+       delete peer_addr;
 }
 
 void Socket::set_block(bool b)
@@ -112,30 +121,6 @@ void Socket::bind(const SockAddr &addr)
        local_addr = addr.copy();
 }
 
-void Socket::close()
-{
-       if(handle==MSP_NET_INVALID_SOCKET_HANDLE)
-               return;
-
-       set_events(IO::P_NONE);
-
-       signal_flush_required.emit();
-#ifdef WIN32
-       closesocket(handle);
-       CloseHandle(event);
-#else
-       ::close(handle);
-#endif
-       handle = MSP_NET_INVALID_SOCKET_HANDLE;
-       connected = false;
-       signal_closed.emit();
-
-       delete local_addr;
-       local_addr = 0;
-       delete peer_addr;
-       peer_addr = 0;
-}
-
 void Socket::set_timeout(const Time::TimeDelta &timeout)
 {
 #ifndef WIN32
@@ -165,8 +150,6 @@ const SockAddr &Socket::get_peer_address() const
 
 void Socket::check_state(bool conn) const
 {
-       if(handle==MSP_NET_INVALID_SOCKET_HANDLE)
-               throw bad_socket_state("socket is closed");
        if(conn && !connected)
                throw bad_socket_state("not connected");
 }