fix NetworkSocket to not forget want_* state if resetting between connect()'s
authorTero Marttila <terom@fixme.fi>
Fri, 11 Sep 2009 15:34:48 +0300
changeset 446 e411c0799fcc
parent 445 94dfb47036ef
child 447 fc9e4305fddf
child 448 34bdf0783874
fix NetworkSocket to not forget want_* state if resetting between connect()'s
src/Network/Socket.cc
--- a/src/Network/Socket.cc	Sat Jan 31 15:21:57 2009 +0200
+++ b/src/Network/Socket.cc	Fri Sep 11 15:34:48 2009 +0300
@@ -19,15 +19,21 @@
 }
 
 NetworkSocket::NetworkSocket (int family, int socktype, int protocol, NetworkReactor *reactor) :
-    sock_type(family, socktype, protocol), fd(-1), type(family, socktype, protocol), registered(0), reactor(reactor ? reactor : NetworkReactor::current)
+    sock_type(family, socktype, protocol), fd(-1), type(family, socktype, protocol),
+    bound(false),
+    registered(false), reactor(reactor ? reactor : NetworkReactor::current),
+    want_read(false), want_write(false)
 {
-    reset();
+
 }
         
 NetworkSocket::NetworkSocket (int fd, socket_type type, NetworkReactor *reactor) :
-    sock_type(type), fd(fd), type(type), registered(0), reactor(reactor ? reactor : NetworkReactor::current)
+    sock_type(type), fd(fd), type(type), 
+    bound(false),
+    registered(false), reactor(reactor ? reactor : NetworkReactor::current),
+    want_read(false), want_write(false)
 {
-    reset();
+
 }
         
 NetworkSocket::~NetworkSocket (void) {
@@ -41,9 +47,8 @@
 }
         
 void NetworkSocket::reset (void) {
+    fd = -1;
     bound = false;
-    want_read = false;
-    want_write = false;
 }
 
 void NetworkSocket::lazy_socket (int family, int socktype, int protocol) {
@@ -75,8 +80,7 @@
     if (::closesocket(fd))
         Engine::log(WARN, "socket.force_close") << "error closing socket: " << dump_errno();
     
-    // reset state
-    fd = -1;
+    // forget fd
     reset();
 }
 
@@ -134,10 +138,9 @@
     if (::getsockname(fd, addr.get_sockaddr(), addr.get_socklen_ptr()))
         throw NetworkSocketErrno(*this, "getsockname");
 
-    // update
+    // updated sockaddr
     addr.update();
 
-    // return addr
     return addr;
 }
 
@@ -148,10 +151,9 @@
     if (::getpeername(fd, addr.get_sockaddr(), addr.get_socklen_ptr()))
         throw NetworkSocketErrno(*this, "getpeername");
 
-    // update
+    // updated sockaddr
     addr.update();
 
-    // return addr
     return addr;
 }
         
@@ -180,7 +182,6 @@
     if (src)
         src->update();
 
-    // done
     return socket;
 }
         
@@ -296,8 +297,7 @@
     if (::closesocket(fd))
         throw NetworkSocketErrno(*this, "close");
     
-    // reset
-    fd = -1;
+    // forget fd
     reset();
 }