\wxheading{Derived from}
-\helpref{wxEvtHandler}{wxevthandler}
+\helpref{wxObject}{wxobject}
\wxheading{Include files}
Functions that perform a timed wait on a certain IO condition.
+\helpref{InterruptWait}{wxsocketbaseinterruptwait}\\
\helpref{Wait}{wxsocketbasewait}\\
+\helpref{WaitForLost}{wxsocketbasewaitforlost}\\
\helpref{WaitForRead}{wxsocketbasewaitforread}\\
\helpref{WaitForWrite}{wxsocketbasewaitforwrite}\\
-\helpref{WaitForLost}{wxsocketbasewaitforlost}
+
+and also:
+
+\helpref{wxSocketServer::WaitForAccept}{wxsocketserverwaitforaccept}\\
+\helpref{wxSocketClient::WaitOnConnect}{wxsocketclientwaitonconnect}
Functions that allow applications to customize socket IO as needed.
+\helpref{GetFlags}{wxsocketbasegetflags}\\
\helpref{SetFlags}{wxsocketbasesetflags}\\
\helpref{SetTimeout}{wxsocketbasesettimeout}
\helpref{Notify}{wxsocketbasenotify}\\
\helpref{SetNotify}{wxsocketbasesetnotify}\\
+\helpref{GetClientData}{wxsocketbasegetclientdata}\\
+\helpref{SetClientData}{wxsocketbasesetclientdata}\\
\helpref{SetEventHandler}{wxsocketbaseseteventhandler}
Callback functions are also available, but they are provided for backwards
-compatibility only. Their use is discouraged in favour of events, and should
-be considered deprecated.
+compatibility only. Their use is strongly discouraged in favour of events,
+and should be considered deprecated. Callbacks may be unsupported in future
+releases of wxWindows.
\helpref{Callback}{wxsocketbasecallback}\\
\helpref{CallbackData}{wxsocketbasecallbackdata}
\func{}{\destruct{wxSocketBase}}{\void}
Destructor. Do not destroy a socket using the delete operator directly;
-use \helpref{Destroy}{wxsocketbasedestroy} instead. Also, do not create socket
-objects in the stack.
+use \helpref{Destroy}{wxsocketbasedestroy} instead. Also, do not create
+socket objects in the stack.
%
% Callback
The first parameter is a reference to the socket object in which the
event occured. The second parameter tells you which event occured.
(See \helpref{wxSocket events}{wxsocketbase}). The third parameter
-is the user data you specified using
-\helpref{CallbackData}{wxsocketbasecallbackdata}.
+is the user data you specified using \helpref{CallbackData}{wxsocketbasecallbackdata}.
Note that events are preferred over callbacks where possible.
Use this function to check for an error condition after one of the
following calls: Discard, Peek, Read, ReadMsg, Unread, Write, WriteMsg.
+%
+% GetClientData
+%
+\membersection{wxSocketBase::GetClientData}\label{wxsocketbasegetclientdata}
+
+\constfunc{void *}{GetClientData}{\void}
+
+Returns a pointer of the client data for this socket, as set with
+\helpref{SetClientData}{wxsocketbasesetclientdata}
+
%
% GetLocal
%
It returns TRUE if no errors happened, FALSE otherwise.
+%
+% GetFlags
+%
+\membersection{wxSocketBase::GetFlags}\label{wxsocketbasegetflags}
+
+\constfunc{wxSocketFlags}{GetFlags}{\void}
+
+Returns current IO flags, as set with \helpref{SetFlags}{wxsocketbasesetflags}
+
%
% GetPeer
%
It returns TRUE if no errors happened, FALSE otherwise.
+%
+% InterruptWait
+%
+\membersection{wxSocketBase::InterruptWait}\label{wxsocketbaseinterruptwait}
+
+\func{void}{InterruptWait}{\void}
+
+Use this function to interrupt any wait operation currently in progress.
+Note that this is not intended as a regular way to interrupt a Wait call,
+but only as an escape mechanism for exceptional situations where it is
+absolutely necessary to use it, for example to abort an operation due to
+some exception or abnormal problem. InterruptWait is automatically called
+when you \helpref{Close}{wxsocketbaseclose} a socket (and thus also upon
+socket destruction), so you don't need to use it in these cases.
+
+\helpref{wxSocketBase::Wait}{wxsocketbasewait},
+\helpref{wxSocketServer::WaitForAccept}{wxsocketserverwaitforaccept},
+\helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost},
+\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread},
+\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite},
+\helpref{wxSocketClient::WaitOnConnect}{wxsocketclientwaitonconnect}
+
%
% IsConnected
%
This function saves the current state of the socket in a stack. Socket
state includes flags, as set with \helpref{SetFlags}{wxsocketbasesetflags},
event mask, as set with \helpref{SetNotify}{wxsocketbasesetnotify} and
-\helpref{Notify}{wxsocketbasenotify}, and current settings for the
-asynchronous callbacks, as set with \helpref{Callback}{wxsocketbasecallback}
+\helpref{Notify}{wxsocketbasenotify}, user data, as set with
+\helpref{SetClientData}{wxsocketbasesetclientdata}, and asynchronous
+callback settings, as set with \helpref{Callback}{wxsocketbasecallback}
and \helpref{CallbackData}{wxsocketbasecallbackdata}.
Calls to SaveState and RestoreState can be nested.
\helpref{wxSocketBase::RestoreState}{wxsocketbaserestorestate}
+%
+% SetClientData
+%
+\membersection{wxSocketBase::SetClientData}\label{wxsocketbasesetclientdata}
+
+\func{void}{SetClientData}{\param{void *}{data}}
+
+Sets user-supplied client data for this socket. All socket events will
+contain a pointer to this data, which can be retrieved with the
+\helpref{wxSocketEvent::GetClientData}{wxsocketeventgetclientdata}
+function.
+
%
% SetEventHandler
%
enabled with \helpref{SetNotify}{wxsocketbasesetnotify} and
\helpref{Notify}{wxsocketbasenotify}.
-You can also specify a callback function to be called when an event
-occurs, although if possible, events should be used instead of callbacks.
-See \helpref{Callback}{wxsocketbasecallback} and
-\helpref{CallbackData}{wxsocketbasecallbackdata}.
-
\wxheading{Parameters}
\docparam{evt\_hdlr}{Specifies the event handler you want to use.}
\helpref{wxSocketBase::Notify}{wxsocketbasenotify},
\helpref{wxSocketEvent}{wxsocketevent},
\helpref{wxEvtHandler}{wxevthandler},
-\helpref{wxSocketBase::Callback}{wxsocketbasecallback},
-\helpref{wxSocketBase::CallbackData}{wxsocketbasecallbackdata}
%
% SetFlags
\func{void}{SetFlags}{\param{wxSocketBase::wxSocketFlags}{ flags}}
+Use SetFlags to customize IO operation for this socket. The {\it flags}
+parameter is a combination of flags ORed toghether. The following flags
+can be used:
+
\twocolwidtha{7cm}
\begin{twocollist}\itemsep=0pt
\twocolitem{{\bf wxSOCKET\_NONE}}{Normal functionality.}
\wxheading{See also}
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait},
+\helpref{wxSocketServer::WaitForAccept}{wxsocketserverwaitforaccept},
+\helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost},
\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread},
-\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite},
-\helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost}
+\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite},
+\helpref{wxSocketClient::WaitOnConnect}{wxsocketclientwaitonconnect}
%
-% WaitForRead
+% WaitForLost
%
-\membersection{wxSocketBase::WaitForRead}\label{wxsocketbasewaitforread}
+\membersection{wxSocketBase::WaitForLost}\label{wxsocketbasewaitforlost}
-\func{bool}{WaitForRead}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}}
+\func{bool}{Wait}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}}
-This function waits until the socket is readable. This might mean that
-queued data is available for reading or, for streamed sockets, that
-the connection has been closed, so that a read operation will complete
-immediately without blocking (unless the {\bf wxSOCKET\_WAITALL} flag
-is set, in which case the operation might still block).
+This function waits until the connection is lost. This may happen if
+the peer gracefully closes the connection or if the connection breaks.
\wxheading{Parameters}
\wxheading{Return value}
-Returns TRUE if the socket becomes readable, FALSE on timeout.
+Returns TRUE if the connection was lost, FALSE if the timeout was reached.
\wxheading{See also}
-\helpref{wxSocketBase::Wait}{wxsocketbasewait},
-\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite},
-\helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost}
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait},
+\helpref{wxSocketBase::Wait}{wxsocketbasewait}
%
-% WaitForWrite
+% WaitForRead
%
-\membersection{wxSocketBase::WaitForWrite}\label{wxsocketbasewaitforwrite}
+\membersection{wxSocketBase::WaitForRead}\label{wxsocketbasewaitforread}
-\func{bool}{WaitForWrite}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}}
+\func{bool}{WaitForRead}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}}
-This function waits until the socket becomes writable. This might mean that
-the socket is ready to send new data, or for streamed sockets, that the
-connection has been closed, so that a write operation is guaranteed to
-complete immediately (unless the {\bf wxSOCKET\_WAITALL} flag is set,
-in which case the operation might still block).
+This function waits until the socket is readable. This might mean that
+queued data is available for reading or, for streamed sockets, that
+the connection has been closed, so that a read operation will complete
+immediately without blocking (unless the {\bf wxSOCKET\_WAITALL} flag
+is set, in which case the operation might still block).
\wxheading{Parameters}
\wxheading{Return value}
-Returns TRUE if the socket becomes writable, FALSE on timeout.
+Returns TRUE if the socket becomes readable, FALSE on timeout.
\wxheading{See also}
-\helpref{wxSocketBase::Wait}{wxsocketbasewait},
-\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread},
-\helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost}
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait},
+\helpref{wxSocketBase::Wait}{wxsocketbasewait}
%
-% WaitForLost
+% WaitForWrite
%
-\membersection{wxSocketBase::WaitForLost}\label{wxsocketbasewaitforlost}
+\membersection{wxSocketBase::WaitForWrite}\label{wxsocketbasewaitforwrite}
-\func{bool}{Wait}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}}
+\func{bool}{WaitForWrite}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}}
-This function waits until the connection is lost. This may happen if
-the peer gracefully closes the connection or if the connection breaks.
+This function waits until the socket becomes writable. This might mean that
+the socket is ready to send new data, or for streamed sockets, that the
+connection has been closed, so that a write operation is guaranteed to
+complete immediately (unless the {\bf wxSOCKET\_WAITALL} flag is set,
+in which case the operation might still block).
\wxheading{Parameters}
\wxheading{Return value}
-Returns TRUE if the connection was lost, FALSE if the timeout was reached.
+Returns TRUE if the socket becomes writable, FALSE on timeout.
\wxheading{See also}
-\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread},
-\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite},
-\helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost}
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait},
+\helpref{wxSocketBase::Wait}{wxsocketbasewait}
%
% Write
\wxheading{See also}
\helpref{wxSocketClient::Connect}{wxsocketclientconnect},
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait},
\helpref{wxSocketBase::IsConnected}{wxsocketbaseisconnected}
% ---------------------------------------------------------------------------
Constructor.
+\membersection{wxSocketEvent::GetClientData}\label{wxsocketeventgetclientdata}
+
+\func{void *}{GetClientData}{\void}
+
+Gets the client data of the socket which generated this event, as
+set with \helpref{wxSocketBase::SetClientData}{wxsocketbasesetclientdata}.
+
\membersection{wxSocketEvent::GetSocket}\label{wxsocketeventgetsocket}
\constfunc{wxSocketBase *}{GetSocket}{\void}
\wxheading{See also}
\helpref{wxSocketServer::Accept}{wxsocketserveraccept},
-\helpref{wxSocketServer::AcceptWith}{wxsocketserveracceptwith}
+\helpref{wxSocketServer::AcceptWith}{wxsocketserveracceptwith},
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait}
The sockets sample demonstrates how to use the communication facilities
provided by \helpref{wxSocket}{wxsocketbase}. There are two different
-applications in this sample: a server, which is implemented as a
-\helpref{wxSocketServer}{wxsocketserver} object, and a client, which is
-implemented with \helpref{wxSocketClient}{wxsocketclient}.
-
-The server binds to the local address, using TCP port number 3000, sets
-up an event handler to be notified of incoming connection requests
-({\bf wxSOCKET\_CONNECTION} event), and stands there, waiting (listening
-in the socket parlance) for clients. For each incoming client, a new
-\helpref{wxSocketBase}{wxsocketbase} object is created, which represents
-the connection. Connections are independent from the server that created
-them, so they set up their own event handler, and stay awaiting for
-{\bf wxSOCKET\_INPUT} (incoming data) or {\bf wxSOCKET\_LOST} (connection
-closed at the remote end) events. This event handler is the same for all
-connections, and demonstrates how to determine which socket the event
-is addressed to by using the \helpref{Socket}{wxsocketeventsocket} function
-in the \helpref{wxSocketEvent}{wxsocketevent} class.
+applications in this sample: a server, which is implemented using a
+\helpref{wxSocketServer}{wxsocketserver} object, and a client, which
+is implemented as a \helpref{wxSocketClient}{wxsocketclient}.
+
+The server binds to the local address, using TCP port number 3000,
+sets up an event handler to be notified of incoming connection requests
+({\bf wxSOCKET\_CONNECTION} events), and stands there, waiting for clients
+({\it listening} in the socket parlance). For each accepted connection,
+a new \helpref{wxSocketBase}{wxsocketbase} object is created. These
+socket objects are independent from the server that created them, so
+they set up their own event handler, and then request to be notified
+of {\bf wxSOCKET\_INPUT} (incoming data) or {\bf wxSOCKET\_LOST}
+(connection closed at the remote end) events. In the sample, the event
+handler is the same for all connections; to find out which socket the
+event is addressed to, the \helpref{GetSocket}{wxsocketeventgetsocket}
+function is used.
Although it might take some time to get used to the event-oriented
system upon which wxSocket is built, the benefits are many. See, for
such as \helpref{Read}{wxsocketbaseread}, \helpref{Write}{wxsocketbasewrite},
\helpref{ReadMsg}{wxsocketbasereadmsg} and \helpref{WriteMsg}{wxsocketbasewritemsg},
and how to set up the correct IO flags depending on what you are going to
-do. See the comments in the code for more information (a lengthy explanation
-on socket flags is available in \helpref{SetFlags}{wxsocketbasesetflags}).
-Note that because both clients and connection objects in the server set
-up an event handler to catch {\bf wxSOCKET\_LOST} events, each one is
-immediately notified if the other end closes the connection.
+do. See the comments in the code for more information. Note that because
+both clients and connection objects in the server set up an event handler
+to catch {\bf wxSOCKET\_LOST} events, each one is immediately notified
+if the other end closes the connection.
-There is also an URL test which demonstrates how to use the \helpref{wxURL}{wxurl}
-class.
+There is also an URL test which shows how to use the \helpref{wxURL}{wxurl}
+class to fetch data from a given URL.
-The sockets sample is work in progress. Coming soon:
+The sockets sample is work in progress. Some things to do:
\begin{itemize}\itemsep=0pt
\item More tests for basic socket functionality.
\item More tests for protocol classes (wxProtocol and its descendants).
-\item Tests for the recently added datagram socket classes.
+\item Tests for the recently added (and still in alpha stage) datagram sockets.
\item New samples which actually do something useful (suggestions accepted).
\end{itemize}