]> granicus.if.org Git - icinga2/commitdiff
Set FIONBIO flag for sockets
authorGunnar Beutner <gunnar.beutner@netways.de>
Thu, 29 Mar 2012 11:15:54 +0000 (13:15 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Thu, 29 Mar 2012 11:15:54 +0000 (13:15 +0200)
Make m_FD member variable private.

base/socket.cpp
base/socket.h
base/tcpserver.cpp
base/tcpsocket.cpp
base/unix.h

index a903b58d7ca422c6f27a6eaca318e54c4b1e502f..210ab9840c979ef2ceef4385069fdf9e3c529f0c 100644 (file)
@@ -30,6 +30,11 @@ void Socket::Stop(void)
 
 void Socket::SetFD(SOCKET fd)
 {
+       unsigned long lTrue = 1;
+
+       if (fd != INVALID_SOCKET)
+               ioctlsocket(fd, FIONBIO, &lTrue);
+
        m_FD = fd;
 }
 
index 3bf14ebbf36b81c705ccc38c16424cb1c914e715..375092282818398a4c6213c0971fff0141487e67 100644 (file)
@@ -5,9 +5,10 @@ namespace icinga {
 
 class Socket : public Object
 {
-protected:
+private:
        SOCKET m_FD;
 
+protected:
        Socket(void);
 
        void Close(bool from_dtor);
index 9df1d49fcc9213eb230ba3af1b9dcd0d6280c1d3..77846357622f9ff290b91d20428ccd803ca89fd1 100644 (file)
@@ -27,7 +27,7 @@ void TCPServer::Start(void)
 
 void TCPServer::Listen(void)
 {
-       listen(m_FD, SOMAXCONN);
+       listen(GetFD(), SOMAXCONN);
 
        Start();
 }
index 96c54827a5c1d9e5e8b27637c7eb3983b3ded21a..09a85a03b8a383b4a7d48b38cda808070113e4be 100644 (file)
@@ -4,9 +4,14 @@ using namespace icinga;
 
 void TCPSocket::MakeSocket(void)
 {
-       assert(m_FD == INVALID_SOCKET);
+       assert(GetFD() == INVALID_SOCKET);
 
-       m_FD = socket(AF_INET, SOCK_STREAM, 0);
+       int fd = socket(AF_INET, SOCK_STREAM, 0);
+
+       if (fd == INVALID_SOCKET)
+               throw exception(/*"socket() failed."*/);
+
+       SetFD(fd);
 }
 
 void TCPSocket::Bind(unsigned short port)
index 6bdeb892e352a2a33de49594770ebb553670c610..20f79528960eaee760c4068086496d66d39eb37a 100644 (file)
@@ -22,4 +22,6 @@ inline void closesocket(int fd)
        close(fd);
 }
 
+#define ioctlsocket ioctl
+
 #endif /* I2_UNIX_H */
\ No newline at end of file