Fixed IPv6 support.
The TcpListener constructor now takes a 'struct sockaddr*' instead of
a string, and the createTcpListeners function creates TcpListener
instances for an address based on the results from getaddrinfo().
The XserverDesktop class now takes a list of TcpListener instances for
each of the RFB and HTTP sockets.
The TcpListener::closeFd member variable is not used and has been
removed.
diff --git a/common/network/TcpSocket.h b/common/network/TcpSocket.h
index b0bba53..e627389 100644
--- a/common/network/TcpSocket.h
+++ b/common/network/TcpSocket.h
@@ -29,6 +29,7 @@
#define __NETWORK_TCP_SOCKET_H__
#include <network/Socket.h>
+#include <sys/socket.h>
#include <list>
@@ -66,20 +67,24 @@
class TcpListener : public SocketListener {
public:
- TcpListener(const char *listenaddr, int port, bool localhostOnly=false,
- int sock=-1, bool close=true);
+ TcpListener(const struct sockaddr *listenaddr, socklen_t listenaddrlen);
+ TcpListener(int sock);
+ TcpListener(const TcpListener& other);
+ TcpListener& operator= (const TcpListener& other);
virtual ~TcpListener();
virtual void shutdown();
virtual Socket* accept();
- void getMyAddresses(std::list<char*>* addrs);
int getMyPort();
-
- private:
- bool closeFd;
};
+ void createLocalTcpListeners(std::list<TcpListener> *listeners,
+ int port);
+ void createTcpListeners(std::list<TcpListener> *listeners,
+ const char *addr,
+ int port);
+
class TcpFilter : public ConnectionFilter {
public:
TcpFilter(const char* filter);