virtual Family get_family() const = 0;
virtual std::string str() const = 0;
- /**
- Fills the given struct sockaddr with information from this SockAddr.
-
- @return Number of bytes used
- */
+ /** Fills a struct sockaddr with information from this SockAddr. Returns
+ the number of bytes used. */
virtual unsigned fill_sockaddr(sockaddr &) const = 0;
virtual unsigned fill_sockaddr(sockaddr_storage &) const;
};
local_addr = addr.copy();
}
-/**
-Closes the socket. Most operations on the socket will throw an exception after
-this.
-*/
void Socket::close()
{
if(handle==MSP_NET_INVALID_SOCKET_HANDLE)
IO::Handle get_event_handle();
bool is_connected() const { return connected; }
+
+ /** Associates the socket with a local address. There must be no existing
+ users of the address. */
void bind(const SockAddr &);
+
+ /** Connects to a remote address. Exact semantics depend on the socket
+ type. */
virtual int connect(const SockAddr &) = 0;
+
+ /// Closes the socket. Most operations will throw an exception after this.
void close();
+
void set_timeout(const Time::TimeDelta &);
const SockAddr &get_local_address() const;
const SockAddr &get_peer_address() const;
namespace Msp {
namespace Net {
-/**
-Used by StreamListenSocket to construct a new socket from accept.
-*/
StreamSocket::StreamSocket(SocketHandle h, const SockAddr &paddr):
Socket(h, paddr),
connecting(false)
set_events(IO::P_INPUT);
}
-/**
-Constructs a new StreamSocket.
-*/
StreamSocket::StreamSocket(Family af, int proto):
Socket(af, SOCK_STREAM, proto),
connecting(false)
{ }
-/**
-Checks the status of an ongoing connection attempt. If the connection fails
-with an error, an exception is thrown.
-
-@return 0 if the connection finished, 1 if not
-*/
int StreamSocket::poll_connect(const Time::TimeDelta &timeout)
{
check_state(false);
return 1;
}
-/**
-Connects the socket to a remote address. In non-blocking mode, this function
-may return before the connection is finished. The caller must then use either
-the poll_connect function or an EventDispatcher to determine when the
-connection is finished.
-
-@return 0 if the connection finished, 1 if it is in progress
-*/
int StreamSocket::connect(const SockAddr &addr)
{
check_state(false);
void StreamSocket::on_event(IO::PollEvent ev)
{
- //cout<<"StreamSocket::on_event "<<ev<<'\n';
if((ev&(IO::P_OUTPUT|IO::P_ERROR)) && connecting)
{
int err;
bool connecting;
public:
- /**
- Emitted when the socket finishes connecting. The argument is a standard
- error code, 0 indicating success.
- */
+ /** Emitted when the socket finishes connecting. The argument is a
+ platform-dependent error code. */
sigc::signal<void, int> signal_connect_finished;
private:
+ /// Used by StreamListenSocket to construct a new socket from accept.
StreamSocket(SocketHandle, const SockAddr &);
public:
StreamSocket(Family, int = 0);
+ /** Connects to a remote address. StreamSockets must be connected before
+ data can be sent and received. Returns 0 if the connection was successfully
+ established, 1 if it's in progress.
+
+ If the socket is non-blocking, this function may return before the
+ connection is fully established. The caller must then use either the
+ poll_connect function or an EventDispatcher to finish the process. */
virtual int connect(const SockAddr &);
+
bool is_connecting() const { return connecting; }
+
+ /** Checks the status of a connection being established. Returns 0 if the
+ connection was established successfully, 1 if it's still in progress. If
+ the attempt finished due to an error, an exception is thrown. */
int poll_connect(const Time::TimeDelta &);
+
private:
void on_event(IO::PollEvent);
};