{
return false;
}
+
+string Socket::GetAddressFromSockaddr(sockaddr *address, socklen_t len)
+{
+ char host[NI_MAXHOST];
+ char service[NI_MAXSERV];
+
+ if (getnameinfo(address, len, host, sizeof(host), service, sizeof(service), NI_NUMERICHOST | NI_NUMERICSERV) < 0)
+ throw InvalidArgumentException(); /* TODO: throw proper exception */
+
+ stringstream s;
+ s << "[" << host << "]:" << service;
+ return s.str();
+}
+
+string Socket::GetClientAddress(void)
+{
+ sockaddr_storage sin;
+ socklen_t len = sizeof(sin);
+
+ if (getsockname(GetFD(), (sockaddr *)&sin, &len) < 0) {
+ HandleSocketError();
+
+ return string();
+ }
+
+ return GetAddressFromSockaddr((sockaddr *)&sin, len);
+}
+
+string Socket::GetPeerAddress(void)
+{
+ sockaddr_storage sin;
+ socklen_t len = sizeof(sin);
+
+ if (getpeername(GetFD(), (sockaddr *)&sin, &len) < 0) {
+ HandleSocketError();
+
+ return string();
+ }
+
+ return GetAddressFromSockaddr((sockaddr *)&sin, len);
+}
int ExceptionEventHandler(const EventArgs& ea);
+ static string GetAddressFromSockaddr(sockaddr *address, socklen_t len);
+
protected:
Socket(void);
virtual void Stop(void);
void Close(void);
+
+ string GetClientAddress(void);
+ string GetPeerAddress(void);
};
}
freeaddrinfo(result);
}
-
-
-string TCPSocket::GetAddressFromSockaddr(sockaddr *address, socklen_t len)
-{
- char host[NI_MAXHOST];
- char service[NI_MAXSERV];
-
- if (getnameinfo(address, len, host, sizeof(host), service, sizeof(service), NI_NUMERICHOST | NI_NUMERICSERV) < 0)
- throw InvalidArgumentException(); /* TODO: throw proper exception */
-
- stringstream s;
- s << "[" << host << "]:" << service;
- return s.str();
-}
-
-string TCPSocket::GetClientAddress(void)
-{
- sockaddr_storage sin;
- socklen_t len = sizeof(sin);
-
- if (getsockname(GetFD(), (sockaddr *)&sin, &len) < 0) {
- HandleSocketError();
-
- return string();
- }
-
- return GetAddressFromSockaddr((sockaddr *)&sin, len);
-}
-
-string TCPSocket::GetPeerAddress(void)
-{
- sockaddr_storage sin;
- socklen_t len = sizeof(sin);
-
- if (getpeername(GetFD(), (sockaddr *)&sin, &len) < 0) {
- HandleSocketError();
-
- return string();
- }
-
- return GetAddressFromSockaddr((sockaddr *)&sin, len);
-}
class I2_BASE_API TCPSocket : public Socket
{
private:
- static string GetAddressFromSockaddr(sockaddr *address, socklen_t len);
-
void MakeSocket(int family);
public:
void Bind(unsigned short port, int family);
void Bind(const char *hostname, unsigned short port, int family);
-
- bool GetClientSockaddr(sockaddr_storage *address);
- bool GetPeerSockaddr(sockaddr_storage *address);
-
- string GetClientAddress(void);
- string GetPeerAddress(void);
};
}