-/* $Id$
-
-This file is part of libmspnet
-Copyright © 2008 Mikkosoft Productions, Mikko Rasa
-Distributed under the LGPL
-*/
-
#ifndef MSP_NET_STREAMSOCKET_H_
#define MSP_NET_STREAMSOCKET_H_
-#include "socket.h"
+#include "clientsocket.h"
namespace Msp {
namespace Net {
-class StreamSocket: public Socket
+class StreamSocket: public ClientSocket
{
- friend class StreamListenSocket;
+ friend class StreamServerSocket;
+
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;
- StreamSocket(Family, int =0);
- bool get_connecting() const { return connecting; }
- int poll_connect(const Time::TimeDelta &);
- int connect(const SockAddr &);
private:
- bool connecting;
+ /// Used by StreamListenSocket to construct a new socket from accept.
+ StreamSocket(const Private &, const SockAddr &);
+public:
+ StreamSocket(Family, int = 0);
- StreamSocket(SocketHandle, const SockAddr &);
+ /** 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 bool connect(const SockAddr &);
+
+ virtual bool poll_connect(const Time::TimeDelta &);
+
+private:
void on_event(IO::PollEvent);
};