]> git.tdb.fi Git - libs/net.git/blobdiff - source/socket.cpp
One more header update
[libs/net.git] / source / socket.cpp
index c845471a58ed13d20608b4768e13879389370016..7a82463bcd16609a89bd69bf816aece68ab66b3a 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef WIN32
-#include <errno.h>
+#include <cerrno>
 #include <fcntl.h>
 #include <sys/socket.h>
 #endif
@@ -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)
@@ -99,8 +108,6 @@ const IO::Handle &Socket::get_event_handle()
 
 void Socket::bind(const SockAddr &addr)
 {
-       check_state(false);
-
        sockaddr_storage sa;
        unsigned size = addr.fill_sockaddr(sa);
 
@@ -112,30 +119,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
@@ -163,14 +146,6 @@ const SockAddr &Socket::get_peer_address() const
        return *peer_addr;
 }
 
-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");
-}
-
 int Socket::set_option(int level, int optname, const void *optval, socklen_t optlen)
 {
 #ifdef WIN32
@@ -191,7 +166,8 @@ int Socket::get_option(int level, int optname, void *optval, socklen_t *optlen)
 
 unsigned Socket::do_write(const char *buf, unsigned size)
 {
-       check_state(true);
+       if(!connected)
+               throw bad_socket_state("not connected");
 
        if(size==0)
                return 0;
@@ -210,7 +186,9 @@ unsigned Socket::do_write(const char *buf, unsigned size)
 
 unsigned Socket::do_read(char *buf, unsigned size)
 {
-       check_state(true);
+       if(!connected)
+               throw bad_socket_state("not connected");
+
 
        if(size==0)
                return 0;