InetAddr(const sockaddr_in &);
InetAddr(in_addr_t, in_port_t);
+ virtual InetAddr *copy() const { return new InetAddr(*this); }
+
Family get_family() const { return INET; }
in_addr_t get_addr() const { return ntohl(addr); }
in_port_t get_port() const { return ntohs(port); }
std::string str() const;
virtual unsigned fill_sockaddr(sockaddr &) const;
- virtual InetAddr *copy() const { return new InetAddr(*this); }
};
} // namespace Net
Inet6Addr(const sockaddr_in6 &);
Inet6Addr(unsigned char [16], in_port_t);
+ virtual Inet6Addr *copy() const { return new Inet6Addr(*this); }
+
virtual Family get_family() const { return INET6; }
virtual std::string str() const;
virtual unsigned fill_sockaddr(sockaddr &) const;
virtual unsigned fill_sockaddr(sockaddr_storage &) const;
-
- virtual Inet6Addr *copy() const { return new Inet6Addr(*this); }
};
} // namespace Net
namespace Msp {
namespace Net {
-unsigned SockAddr::fill_sockaddr(sockaddr_storage &sa) const
-{
- return fill_sockaddr(reinterpret_cast<sockaddr &>(sa));
-}
-
SockAddr *SockAddr::create(const sockaddr_storage &sa)
{
switch(sa.ss_family)
}
}
+unsigned SockAddr::fill_sockaddr(sockaddr_storage &sa) const
+{
+ return fill_sockaddr(reinterpret_cast<sockaddr &>(sa));
+}
+
} // namespace Net
} // namespace Msp
class SockAddr
{
+protected:
+ SockAddr() { }
public:
+ virtual ~SockAddr() { }
+
+ static SockAddr *create(const sockaddr &sa) { return create(reinterpret_cast<const sockaddr_storage &>(sa)); }
+ static SockAddr *create(const sockaddr_storage &);
+
+ virtual SockAddr *copy() const = 0;
+
virtual Family get_family() const = 0;
virtual std::string str() const = 0;
*/
virtual unsigned fill_sockaddr(sockaddr &) const = 0;
virtual unsigned fill_sockaddr(sockaddr_storage &) const;
-
- virtual SockAddr *copy() const =0;
-
- virtual ~SockAddr() { }
-
- static SockAddr *create(const sockaddr &sa) { return create(reinterpret_cast<const sockaddr_storage &>(sa)); }
- static SockAddr *create(const sockaddr_storage &);
-protected:
- SockAddr() { }
};
} // namespace Net
class StreamListenSocket: public Socket
{
+private:
+ bool listening;
+
public:
StreamListenSocket(Family, int = 0);
+
int connect(const SockAddr &);
void listen(const SockAddr &, unsigned = 4);
StreamSocket *accept();
-private:
- bool listening;
};
} // namespace Net
public:
StreamSocket(Family, int = 0);
+ virtual int connect(const SockAddr &);
bool is_connecting() const { return connecting; }
int poll_connect(const Time::TimeDelta &);
- int connect(const SockAddr &);
private:
void on_event(IO::PollEvent);
};