+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Name: socket.tex
+%% Purpose: wxSocket docs
+%% Author: Guillermo Rodriguez Garcia <guille@iies.es>
+%% Modified by:
+%% Created: 1999
+%% RCS-ID: $Id$
+%% Copyright: (c) wxWindows team
+%% Licence: wxWindows licence
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
\section{\class{wxSocketBase}}\label{wxsocketbase}
+wxSocketBase is the base class for all socket-related objects, and it
+defines all basic IO functionality.
+
\wxheading{Derived from}
-\helpref{wxEvtHandler}{wxevthandler}
+\helpref{wxObject}{wxobject}
\wxheading{Include files}
necessary.
The {\bf wxSOCKET\_OUTPUT} event is issued when a socket is first
-connected with Connect or accepted with Accept. After that, new
+connected with \helpref{Connect}{wxsocketclientconnect} or accepted
+with \helpref{Accept}{wxsocketserveraccept}. After that, new
events will be generated only after an output operation fails
with {\bf wxSOCKET\_WOULDBLOCK} and buffer space becomes available
again. This means that the application should assume that it
that it was closed by the peer. Also, this event will be issued if
a delayed connection request fails.
-% ---------------------------------------------------------------------------
-% Event handling
-% ---------------------------------------------------------------------------
\wxheading{Event handling}
-To process events from a socket, use the following event handler macro to direct
-input to member functions that take a \helpref{wxSocketEvent}{wxsocketevent} argument.
+To process events coming from a socket object, use the following event
+handler macro to direct events to member functions that take a
+\helpref{wxSocketEvent}{wxsocketevent} argument.
\twocolwidtha{7cm}%
\begin{twocollist}\itemsep=0pt
-\twocolitem{{\bf EVT\_SOCKET(id, func)}}{A socket event occured.}
+\twocolitem{{\bf EVT\_SOCKET(id, func)}}{Process a wxEVT\_SOCKET event.}
\end{twocollist}
-% ---------------------------------------------------------------------------
-% See also ...
-% ---------------------------------------------------------------------------
\wxheading{See also}
\helpref{wxSocketEvent}{wxsocketevent},
\helpref{wxSocketClient}{wxsocketclient},
-\helpref{wxSocketServer}{wxsocketserver}
+\helpref{wxSocketServer}{wxsocketserver},
+\helpref{Sockets sample}{samplesockets}
% ---------------------------------------------------------------------------
-% Members
+% Function groups
% ---------------------------------------------------------------------------
-\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxSocketBase::wxSocketBase}
+\latexignore{\rtfignore{\wxheading{Function groups}}}
-\func{}{wxSocketBase}{\void}
+\membersection{Construction and destruction}
-Default constructor. Don't use it; use \helpref{wxSocketClient}{wxsocketclient}
-or \helpref{wxSocketServer}{wxsocketserver}.
+\helpref{wxSocketBase}{wxsocketbaseconstruct}\\
+\helpref{\destruct{wxSocketBase}}{wxsocketbasedestruct}\\
+\helpref{wxDestroy}{wxsocketbasedestroy}
-\membersection{wxSocketBase::\destruct{wxSocketBase}}
+\membersection{Socket state}
-\func{}{\destruct{wxSocketBase}}{\void}
+Functions to retrieve current state and miscellaneous info.
+
+\helpref{Error}{wxsocketbaseerror}\\
+\helpref{GetLocal}{wxsocketbasegetlocal}\\
+\helpref{GetPeer}{wxsocketbasegetpeer}
+\helpref{IsConnected}{wxsocketbaseisconnected}\\
+\helpref{IsData}{wxsocketbaseisdata}\\
+\helpref{IsDisconnected}{wxsocketbaseisdisconnected}\\
+\helpref{LastCount}{wxsocketbaselastcount}\\
+\helpref{LastError}{wxsocketbaselasterror}\\
+\helpref{Ok}{wxsocketbaseok}\\
+\helpref{SaveState}{wxsocketbasesavestate}\\
+\helpref{RestoreState}{wxsocketbaserestorestate}
+
+\membersection{Basic IO}
+
+Functions that perform basic IO functionality.
+
+\helpref{Close}{wxsocketbaseclose}\\
+\helpref{Discard}{wxsocketbasediscard}\\
+\helpref{Peek}{wxsocketbasepeek}\\
+\helpref{Read}{wxsocketbaseread}\\
+\helpref{ReadMsg}{wxsocketbasereadmsg}\\
+\helpref{Unread}{wxsocketbaseunread}\\
+\helpref{Write}{wxsocketbasewrite}\\
+\helpref{WriteMsg}{wxsocketbasewritemsg}
+
+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}\\
+
+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}
+
+\membersection{Handling socket events}
+
+Functions that allow applications to receive socket events.
+
+\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 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}
-Destroys the wxSocketBase object.
% ---------------------------------------------------------------------------
-% State functions
+% Members here
% ---------------------------------------------------------------------------
+\helponly{\insertatlevel{2}{
+
+\wxheading{Members}
+
+}}
+
+\membersection{wxSocketBase::wxSocketBase}\label{wxsocketbaseconstruct}
+
+\func{}{wxSocketBase}{\void}
+
+Default constructor. Don't use it directly; instead, use
+\helpref{wxSocketClient}{wxsocketclient} to construct a socket client, or
+\helpref{wxSocketServer}{wxsocketserver} to construct a socket server.
+
+\membersection{wxSocketBase::\destruct{wxSocketBase}}\label{wxsocketbasedestruct}
+
+\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.
+
%
-% SetFlags
+% Callback
%
+\membersection{wxSocketBase::Callback}\label{wxsocketbasecallback}
-\membersection{wxSocketBase::SetFlags}\label{wxsocketbasesetflags}
+\func{wxSocketBase::wxSockCbk}{Callback}{\param{wxSocketBase::wxSockCbk}{ callback}}
-\func{void}{SetFlags}{\param{wxSocketBase::wxSockFlags}{ flags}}
+You can setup a callback function to be called when an event occurs.
+The function will be called only for those events for which notification
+has been enabled with \helpref{Notify}{wxsocketbasenotify} and
+\helpref{SetNotify}{wxsocketbasesetnotify}. The prototype of the
+callback must be as follows:
-\twocolwidtha{7cm}
-\begin{twocollist}\itemsep=0pt
-\twocolitem{{\bf wxSOCKET\_NONE}}{Normal functionality.}
-\twocolitem{{\bf wxSOCKET\_NOWAIT}}{Read/write as much data as possible and return immediately.}
-\twocolitem{{\bf wxSOCKET\_WAITALL}}{Wait for all required data to be read/written unless an error occurs.}
-\twocolitem{{\bf wxSOCKET\_BLOCK}}{Block the GUI (do not wxYield) while reading/writing data.}
-\end{twocollist}
+\begin{verbatim}
+void SocketCallback(wxSocketBase& sock, wxSocketNotify evt, char *cdata);
+\end{verbatim}
-A brief overview on how to use these flags follows.
+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}.
-If no flag is specified (this is the same as {\bf wxSOCKET\_NONE}),
-IO calls will return after some data has been read or written, even
-when the transfer might not be complete. This is the same as issuing
-exactly one blocking low-level call to recv() or send(). Note that
-blocking here refers to when the function returns, not to whether
-the GUI blocks during this time.
+Note that events are preferred over callbacks where possible.
-If {\bf wxSOCKET\_NOWAIT} is specified, IO calls will return immediately.
-Read operations will retrieve only available data. Write operations will
-write as much data as possible, depending on how much space is available
-in the output buffer. This is the same as issuing exactly one nonblocking
-low-level call to recv() or send(). Note that nonblocking here refers to
-when the function returns, not to whether the GUI blocks during this time.
+\wxheading{Return value}
-If {\bf wxSOCKET\_WAITALL} is specified, IO calls won't return until ALL
-the data has been read or written (or until an error occurs), blocking if
-necessary, and issuing several low level calls if necessary. This is the
-same as having a loop which makes as many blocking low-level calls to
-recv() or send() as needed so as to transfer all the data. Note that
-"blocking" here refers to when the function returns, not to whether
-the GUI blocks during this time.
+A pointer to the previous callback.
-The {\bf wxSOCKET\_BLOCK} flag controls whether the GUI blocks during
-IO operations. If this flag is not used, then the application must take
-extra care to avoid unwanted reentrance.
+\wxheading{See also}
-So:
+\helpref{wxSocketBase::CallbackData}{wxsocketbasecallbackdata},
+\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify},
+\helpref{wxSocketBase::Notify}{wxsocketbasenotify}
-{\bf wxSOCKET\_NONE} will try to read at least SOME data, no matter how much.
+%
+% CallbackData
+%
+\membersection{wxSocketBase::CallbackData}\label{wxsocketbasecallbackdata}
-{\bf wxSOCKET\_NOWAIT} will always return immediately, even if it cannot
-read or write ANY data.
+\func{char *}{CallbackData}{\param{char *}{cdata}}
-{\bf wxSOCKET\_WAITALL} will only return when it has read or written ALL
-the data.
+This function sets the the user data which will be passed to a
+callback function set via \helpref{Callback}{wxsocketbasecallback}.
-{\bf wxSOCKET\_BLOCK} has nothing to do with the previous flags and
-it controls whether the GUI blocks.
+Note that events are preferred over callbacks where possible.
+
+\wxheading{Return value}
+
+A pointer to the previous user data.
+
+\helpref{wxSocketBase::Callback}{wxsocketbasecallback},
+\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify},
+\helpref{wxSocketBase::Notify}{wxsocketbasenotify}
%
-% SetNotify
+% Close
%
-\membersection{wxSocketBase::SetNotify}\label{wxsocketbasesetnotify}
+\membersection{wxSocketBase::Close}\label{wxsocketbaseclose}
-\func{void}{SetNotify}{\param{wxSocketEventFlags}{ flags}}
+\func{void}{Close}{\void}
-SetNotify specifies which socket events are to be sent to the event handler.
-The {\it flags} parameter is a combination of flags ORed toghether. The
-following flags can be used:
+This function shuts down the socket, disabling further transmission and
+reception of data; it also disables events for the socket and frees the
+associated system resources. Upon socket destruction, Close is automatically
+called. This means that you don't need to do it yourself, unless you
+explicitly want to disable further operation.
-\twocolwidtha{7cm}
-\begin{twocollist}\itemsep=0pt
-\twocolitem{{\bf wxSOCKET\_INPUT\_FLAG}}{to receive wxSOCKET\_INPUT}
-\twocolitem{{\bf wxSOCKET\_OUTPUT\_FLAG}}{to receive wxSOCKET\_OUTPUT}
-\twocolitem{{\bf wxSOCKET\_CONNECTION\_FLAG}}{to receive wxSOCKET\_CONNECTION}
-\twocolitem{{\bf wxSOCKET\_LOST\_FLAG}}{to receive wxSOCKET\_LOST}
-\end{twocollist}
+\wxheading{Remark/Warning}
-For example:
+Although Close immediately disables events for the socket, it is possible
+that event messages may be waiting in the application's event queue. The
+application must therefore be prepared to handle socket event messages
+even after calling Close.
-\begin{verbatim}
- sock.SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG);
-\end{verbatim}
+%
+% Destroy
+%
+\membersection{wxSocketBase::Destroy}\label{wxsocketbasedestroy}
-In this example, the user will be notified about incoming socket data and
-whenever the connection is closed.
+\func{bool}{Destroy}{\void}
-For more information on socket events see \helpref{wxSocket events}{wxsocketbase}.
+Destroys the socket safely. Use this function instead of the delete operator,
+since otherwise socket events could reach the application even after the
+socket has been destroyed. To prevent this problem, this function appends
+the wxSocket to a list of object to be deleted on idle time, after all
+events have been processed. For the same reason, you should avoid creating
+socket objects in the stack.
+
+Destroy calls \helpref{Close}{wxsocketbaseclose} automatically.
+
+\wxheading{Return value}
+
+Always TRUE.
%
-% SetTimeout
+% Discard
%
-\membersection{wxSocketBase::SetTimeout}\label{wxsocketbasesettimeout}
+\membersection{wxSocketBase::Discard}\label{wxsocketbasediscard}
-\func{void}{SetTimeout}{\param{int }{seconds}}
+\func{wxSocketBase\&}{Discard}{\void}
+
+This function simply deletes all bytes in the incoming queue. This function
+always returns immediately and its operation is not affected by IO flags.
+
+Use \helpref{LastCount}{wxsocketbaselastcount} to verify the number of bytes actually discarded.
+
+If you use \helpref{Error}{wxsocketbaseerror}, it will always return FALSE.
+
+%
+% Error
+%
+\membersection{wxSocketBase::Error}\label{wxsocketbaseerror}
+
+\constfunc{bool}{Error}{\void}
+
+Returns TRUE if an error occured in the last IO operation.
+
+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
+%
+\membersection{wxSocketBase::GetLocal}\label{wxsocketbasegetlocal}
+
+\constfunc{bool}{GetLocal}{\param{wxSockAddress\& }{addr\_man}}
+
+This function returns the local address field of the socket. The local
+address field contains the complete local address of the socket (local
+address, local port, ...).
+
+\wxheading{Return value}
+
+It returns TRUE if no errors happened, FALSE otherwise.
+
+%
+% GetFlags
+%
+\membersection{wxSocketBase::GetFlags}\label{wxsocketbasegetflags}
+
+\constfunc{wxSocketFlags}{GetFlags}{\void}
-This function sets the default socket timeout in seconds. This
-timeout applies to IO calls, and also to Wait() functions if you
-don't specify a wait interval. If you never use SetTimeout(), the
-default timeout will be 10 minutes.
+Returns current IO flags, as set with \helpref{SetFlags}{wxsocketbasesetflags}
+
+%
+% GetPeer
+%
+\membersection{wxSocketBase::GetPeer}\label{wxsocketbasegetpeer}
+
+\constfunc{bool}{GetPeer}{\param{wxSockAddress\& }{addr\_man}}
+
+This function returns the peer address field of the socket. The peer
+address field contains the complete peer host address of the socket
+(address, port, ...).
+
+\wxheading{Return value}
+
+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
+%
+\membersection{wxSocketBase::IsConnected}\label{wxsocketbaseisconnected}
+
+\constfunc{bool}{IsConnected}{\void}
+
+Returns TRUE if the socket is connected.
+
+%
+% IsData
+%
+\membersection{wxSocketBase::IsData}\label{wxsocketbaseisdata}
+
+\constfunc{bool}{IsData}{\void}
+
+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).
+
+\membersection{wxSocketBase::IsDisconnected}\label{wxsocketbaseisdisconnected}
+
+%
+% IsDisconnected
+%
+\constfunc{bool}{IsDisconnected}{\void}
+
+Returns TRUE if the socket is not connected.
+
+\membersection{wxSocketBase::LastCount}\label{wxsocketbaselastcount}
+
+%
+% LastCount
+%
+\constfunc{wxUint32}{LastCount}{\void}
+
+Returns the number of bytes read or written by the last IO call.
+
+Use this function to get the number of bytes actually transferred
+after using one of the following IO calls: Discard, Peek, Read,
+ReadMsg, Unread, Write, WriteMsg.
+
+%
+% LastError
+%
+\membersection{wxSocketBase::LastError}\label{wxsocketbaselasterror}
+
+\constfunc{wxSocketError}{LastError}{\void}
+
+Returns the last wxSocket error. See \helpref{wxSocket errors}{wxsocketbase}.
+
+Please note that this function merely returns the last error code,
+but it should not be used to determine if an error has occured (this
+is because successful operations do not change the LastError value).
+Use \helpref{Error}{wxsocketbaseerror} first, in order to determine
+if the last IO call failed. If this returns TRUE, use LastError
+to discover the cause of the error.
%
% Notify
\func{void}{Notify}{\param{bool}{ notify}}
-Notify will enable (notify is TRUE) or disable (notify is FALSE) the propagation
-of socket events.
+According to the {\it notify} value, this function enables
+or disables socket events. If {\it notify} is TRUE, the events
+configured with \helpref{SetNotify}{wxsocketbasesetnotify} will
+be sent to the application. If {\it notify} is FALSE; no events
+will be sent.
%
% Ok
%
-
\membersection{wxSocketBase::Ok}\label{wxsocketbaseok}
\constfunc{bool}{Ok}{\void}
Returns TRUE if the socket is initialized and ready and FALSE in other
cases.
-\membersection{wxSocketBase::Error}\label{wxsocketbaseerror}
+\wxheading{Remark/Warning}
-\constfunc{bool}{Error}{\void}
+For \helpref{wxSocketClient}{wxsocketclient}, Ok won't return TRUE unless
+the client is connected to a server.
-Returns TRUE if an error occured in the last IO operation.
+For \helpref{wxSocketServer}{wxsocketserver}, Ok will return TRUE if the
+server could bind to the specified address and is already listening for
+new connections.
-The following operations update the Error() status:
-Read, Write, ReadMsg, WriteMsg, Peek, Unread, Discard.
+Ok does not check for IO errors; use \helpref{Error}{wxsocketbaseerror}
+instead for that purpose.
-\membersection{wxSocketBase::IsConnected}\label{wxsocketbaseconnected}
+%
+% RestoreState
+%
+\membersection{wxSocketBase::RestoreState}\label{wxsocketbaserestorestate}
-\constfunc{bool}{IsConnected}{\void}
+\func{void}{RestoreState}{\void}
-Returns TRUE if the socket is connected.
+This function restores the previous state of the socket, as saved
+with \helpref{SaveState}{wxsocketbasesavestate}
-\membersection{wxSocketBase::IsData}\label{wxsocketbaseisdata}
+Calls to SaveState and RestoreState can be nested.
-\constfunc{bool}{IsData}{\void}
+\wxheading{See also}
-Returns TRUE if there is data available to be read.
+\helpref{wxSocketBase::SaveState}{wxsocketbasesavestate}
-\membersection{wxSocketBase::IsDisconnected}\label{wxsocketbasedisconnected}
+%
+% SaveState
+%
+\membersection{wxSocketBase::SaveState}\label{wxsocketbasesavestate}
-\constfunc{bool}{IsDisconnected}{\void}
+\func{void}{SaveState}{\void}
+
+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}, 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.
+
+\wxheading{See also}
+
+\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
+%
+\membersection{wxSocketBase::SetEventHandler}\label{wxsocketbaseseteventhandler}
+
+\func{void}{SetEventHandler}{\param{wxEvtHandler\&}{ evt\_hdlr}, \param{int}{ id = -1}}
+
+Sets an event handler to be called when a socket event occurs. The
+handler will be called for those events for which notification is
+enabled with \helpref{SetNotify}{wxsocketbasesetnotify} and
+\helpref{Notify}{wxsocketbasenotify}.
+
+\wxheading{Parameters}
+
+\docparam{evt\_hdlr}{Specifies the event handler you want to use.}
+
+\docparam{id}{The id of socket event.}
+
+\wxheading{See also}
+
+\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify},
+\helpref{wxSocketBase::Notify}{wxsocketbasenotify},
+\helpref{wxSocketEvent}{wxsocketevent},
+\helpref{wxEvtHandler}{wxevthandler},
+
+%
+% SetFlags
+%
+\membersection{wxSocketBase::SetFlags}\label{wxsocketbasesetflags}
+
+\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.}
+\twocolitem{{\bf wxSOCKET\_NOWAIT}}{Read/write as much data as possible and return immediately.}
+\twocolitem{{\bf wxSOCKET\_WAITALL}}{Wait for all required data to be read/written unless an error occurs.}
+\twocolitem{{\bf wxSOCKET\_BLOCK}}{Block the GUI (do not yield) while reading/writing data.}
+\end{twocollist}
-Returns TRUE if the socket is disconnected.
+A brief overview on how to use these flags follows.
-\membersection{wxSocketBase::IsNoWait}\label{wxsocketbasenowait}
+If no flag is specified (this is the same as {\bf wxSOCKET\_NONE}),
+IO calls will return after some data has been read or written, even
+when the transfer might not be complete. This is the same as issuing
+exactly one blocking low-level call to recv() or send(). Note that
+{\it blocking} here refers to when the function returns, not to whether
+the GUI blocks during this time.
+
+If {\bf wxSOCKET\_NOWAIT} is specified, IO calls will return immediately.
+Read operations will retrieve only available data. Write operations will
+write as much data as possible, depending on how much space is available
+in the output buffer. This is the same as issuing exactly one nonblocking
+low-level call to recv() or send(). Note that {\it nonblocking} here
+refers to when the function returns, not to whether the GUI blocks during
+this time.
+
+If {\bf wxSOCKET\_WAITALL} is specified, IO calls won't return until ALL
+the data has been read or written (or until an error occurs), blocking if
+necessary, and issuing several low level calls if necessary. This is the
+same as having a loop which makes as many blocking low-level calls to
+recv() or send() as needed so as to transfer all the data. Note that
+{\it blocking} here refers to when the function returns, not to whether
+the GUI blocks during this time.
+
+The {\bf wxSOCKET\_BLOCK} flag controls whether the GUI blocks during
+IO operations. If this flag is specified, the socket will not yield
+during IO calls, so the GUI will remain blocked until the operation
+completes. If it is not used, then the application must take extra
+care to avoid unwanted reentrance.
+
+So:
+
+{\bf wxSOCKET\_NONE} will try to read at least SOME data, no matter how much.
+
+{\bf wxSOCKET\_NOWAIT} will always return immediately, even if it cannot
+read or write ANY data.
+
+{\bf wxSOCKET\_WAITALL} will only return when it has read or written ALL
+the data.
+
+{\bf wxSOCKET\_BLOCK} has nothing to do with the previous flags and
+it controls whether the GUI blocks.
+
+%
+% SetNotify
+%
+\membersection{wxSocketBase::SetNotify}\label{wxsocketbasesetnotify}
-\constfunc{bool}{IsNoWait}{\void}
+\func{void}{SetNotify}{\param{wxSocketEventFlags}{ flags}}
-Returns TRUE if the socket mustn't wait.
+SetNotify specifies which socket events are to be sent to the event handler.
+The {\it flags} parameter is a combination of flags ORed toghether. The
+following flags can be used:
-\membersection{wxSocketBase::LastCount}\label{wxsocketbaselastcount}
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf wxSOCKET\_INPUT\_FLAG}}{to receive wxSOCKET\_INPUT}
+\twocolitem{{\bf wxSOCKET\_OUTPUT\_FLAG}}{to receive wxSOCKET\_OUTPUT}
+\twocolitem{{\bf wxSOCKET\_CONNECTION\_FLAG}}{to receive wxSOCKET\_CONNECTION}
+\twocolitem{{\bf wxSOCKET\_LOST\_FLAG}}{to receive wxSOCKET\_LOST}
+\end{twocollist}
-\constfunc{wxUint32}{LastCount}{\void}
+For example:
-Returns the number of bytes read or written by the last IO call.
+\begin{verbatim}
+ sock.SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG);
+ sock.Notify(TRUE);
+\end{verbatim}
-The following operations update the LastCount() value:
-Read, Write, ReadMsg, WriteMsg, Peek, Unread, Discard.
+In this example, the user will be notified about incoming socket data and
+whenever the connection is closed.
-\membersection{wxSocketBase::LastError}\label{wxsocketbaselasterror}
+For more information on socket events see \helpref{wxSocket events}{wxsocketbase}.
-\constfunc{wxSocketError}{LastError}{\void}
+%
+% SetTimeout
+%
+\membersection{wxSocketBase::SetTimeout}\label{wxsocketbasesettimeout}
-Returns the last wxSocket error. See \helpref{wxSocket errors}{wxsocketbase}.
+\func{void}{SetTimeout}{\param{int }{seconds}}
-Please note that this function merely returns the last error code,
-but it should not be used to determine if an error has occured (this
-is because successful operations do not change the LastError value).
-Use Error, instead of LastError, to determine if the last IO call
-failed. If Error returns TRUE, use LastError to discover the
-cause of the error.
+This function sets the default socket timeout in seconds. This timeout
+applies to all IO calls, and also to the \helpref{Wait}{wxsocketbasewait}
+family of functions if you don't specify a wait interval. Initially, the
+default is set to 10 minutes.
-% ---------------------------------------------------------------------------
-% IO calls
-% ---------------------------------------------------------------------------
%
% Peek
%
\membersection{wxSocketBase::Peek}\label{wxsocketbasepeek}
-\func{wxSocketBase\&}{Peek}{\param{char *}{ buffer}, \param{wxUint32}{ nbytes}}
+\func{wxSocketBase\&}{Peek}{\param{void *}{ buffer}, \param{wxUint32}{ nbytes}}
This function peeks a buffer of {\it nbytes} bytes from the socket.
Peeking a buffer doesn't delete it from the socket input queue.
-Use LastCount to verify the number of bytes actually peeked.
+Use \helpref{LastCount}{wxsocketbaselastcount} to verify the number of bytes actually peeked.
-Use Error to determine if the operation succeeded.
+Use \helpref{Error}{wxsocketbaseerror} to determine if the operation succeeded.
\wxheading{Parameters}
\wxheading{Remark/Warning}
-The exact behaviour of wxSocketBase::Peek() depends on the combination
+The exact behaviour of wxSocketBase::Peek depends on the combination
of flags being used. For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}
\wxheading{See also}
%
\membersection{wxSocketBase::Read}\label{wxsocketbaseread}
-\func{wxSocketBase\&}{Read}{\param{char *}{ buffer}, \param{wxUint32}{ nbytes}}
+\func{wxSocketBase\&}{Read}{\param{void *}{ buffer}, \param{wxUint32}{ nbytes}}
This function reads a buffer of {\it nbytes} bytes from the socket.
-Use LastCount to verify the number of bytes actually read.
+Use \helpref{LastCount}{wxsocketbaselastcount} to verify the number of bytes actually read.
-Use Error to determine if the operation succeeded.
+Use \helpref{Error}{wxsocketbaseerror} to determine if the operation succeeded.
\wxheading{Parameters}
\wxheading{Remark/Warning}
-The exact behaviour of wxSocketBase::Read() depends on the combination
-of flags being used. For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}.
-
-\wxheading{See also}
-
-\helpref{wxSocketBase::Error}{wxsocketbaseerror},
-\helpref{wxSocketBase::LastError}{wxsocketbaselasterror},
-\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount},
-\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}
-
-%
-% Write
-%
-\membersection{wxSocketBase::Write}\label{wxsocketbasewrite}
-
-\func{wxSocketBase\&}{Write}{\param{const char *}{ buffer}, \param{wxUint32}{ nbytes}}
-
-This function writes a buffer of {\it nbytes} bytes to the socket.
-
-Use LastCount to verify the number of bytes actually written.
-
-Use Error to determine if the operation succeeded.
-
-\wxheading{Parameters}
-
-\docparam{buffer}{Buffer with the data to be sent.}
-
-\docparam{nbytes}{Number of bytes.}
-
-\wxheading{Return value}
-
-Returns a reference to the current object.
-
-\wxheading{Remark/Warning}
-
-The exact behaviour of wxSocketBase::Write() depends on the combination
+The exact behaviour of wxSocketBase::Read depends on the combination
of flags being used. For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}.
\wxheading{See also}
\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount},
\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}
-%
-% WriteMsg
-%
-\membersection{wxSocketBase::WriteMsg}\label{wxsocketbasewritemsg}
-
-\func{wxSocketBase\&}{WriteMsg}{\param{const char *}{ buffer}, \param{wxUint32}{ nbytes}}
-
-This function writes a buffer of {\it nbytes} bytes from the socket, but it
-writes a short header before so that ReadMsg knows how much data should it
-actually read. So, a buffer sent with WriteMsg {\bf must} be read with
-ReadMsg. This function always waits for the entire buffer to be sent,
-unless an error occurs.
-
-Use LastCount to verify the number of bytes actually written.
-
-Use Error to determine if the operation succeeded.
-
-\wxheading{Parameters}
-
-\docparam{buffer}{Buffer with the data to be sent.}
-
-\docparam{nbytes}{Number of bytes.}
-
-\wxheading{Return value}
-
-Returns a reference to the current object.
-
-\wxheading{Remark/Warning}
-
-wxSocketBase::WriteMsg() will behave as if the {\bf wxSOCKET\_WAITALL} flag
-was always set and it will always ignore the {\bf wxSOCKET\_NOWAIT} flag.
-The exact behaviour of WriteMsg depends on the {\bf wxSOCKET\_BLOCK} flag.
-For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}.
-
-\wxheading{See also}
-
-\helpref{wxSocketBase::Error}{wxsocketbaseerror},
-\helpref{wxSocketBase::LastError}{wxsocketbaselasterror},
-\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount},
-\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags},
-\helpref{wxSocketBase::ReadMsg}{wxsocketbasereadmsg}
-
%
% ReadMsg
%
\membersection{wxSocketBase::ReadMsg}\label{wxsocketbasereadmsg}
-\func{wxSocketBase\&}{ReadMsg}{\param{char *}{ buffer}, \param{wxUint32}{ nbytes}}
+\func{wxSocketBase\&}{ReadMsg}{\param{void *}{ buffer}, \param{wxUint32}{ nbytes}}
-This function reads a buffer sent by WriteMsg on a socket. If the buffer passed
-to the function isn't big enough, the remaining bytes will be discarded. This
-function always waits for the buffer to be entirely filled, unless an error occurs.
+This function reads a buffer sent by \helpref{WriteMsg}{wxsocketbasewritemsg}
+on a socket. If the buffer passed to the function isn't big enough, the
+remaining bytes will be discarded. This function always waits for the
+buffer to be entirely filled, unless an error occurs.
-Use LastCount to verify the number of bytes actually read.
+Use \helpref{LastCount}{wxsocketbaselastcount} to verify the number of bytes actually read.
-Use Error to determine if the operation succeeded.
+Use \helpref{Error}{wxsocketbaseerror} to determine if the operation succeeded.
\wxheading{Parameters}
\docparam{buffer}{Buffer where to put read data.}
-\docparam{nbytes}{Number of bytes allocated for the buffer.}
+\docparam{nbytes}{Size of the buffer.}
\wxheading{Return value}
\wxheading{Remark/Warning}
-wxSocketBase::ReadMsg() will behave as if the {\bf wxSOCKET\_WAITALL} flag
+wxSocketBase::ReadMsg will behave as if the {\bf wxSOCKET\_WAITALL} flag
was always set and it will always ignore the {\bf wxSOCKET\_NOWAIT} flag.
The exact behaviour of ReadMsg depends on the {\bf wxSOCKET\_BLOCK} flag.
For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}.
%
\membersection{wxSocketBase::Unread}\label{wxsocketbaseunread}
-\func{wxSocketBase\&}{Unread}{\param{const char *}{ buffer}, \param{wxUint32}{ nbytes}}
+\func{wxSocketBase\&}{Unread}{\param{const void *}{ buffer}, \param{wxUint32}{ nbytes}}
This function unreads a buffer. That is, the data in the buffer is put back
in the incoming queue. This function is not affected by wxSocket flags.
-If you use LastCount, it will always return {\it nbytes}.
+If you use \helpref{LastCount}{wxsocketbaselastcount}, it will always return {\it nbytes}.
-If you use Error, it will always return FALSE.
+If you use \helpref{Error}{wxsocketbaseerror}, it will always return FALSE.
\wxheading{Parameters}
\helpref{wxSocketBase::LastError}{wxsocketbaselasterror}
%
-% Discard
+% Wait
%
-\membersection{wxSocketBase::Discard}\label{wxsocketbasediscard}
-
-\func{wxSocketBase\&}{Discard}{\void}
-
-This function simply deletes all bytes in the incoming queue. This function
-always returns immediately and its operation is not affected by IO flags.
-
-Use LastCount to see the number of bytes discarded.
-
-If you use Error, it will always return FALSE.
-
-% ---------------------------------------------------------------------------
-% Wait functions
-% ---------------------------------------------------------------------------
\membersection{wxSocketBase::Wait}\label{wxsocketbasewait}
\func{bool}{Wait}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}}
-This function waits until one of the following conditions is true: there
-is data available for reading; the output buffer is empty (you can send
-new data); the connection has been lost; an incoming connection arrived
-(only for servers); a connection request has completed (only for clients).
-It is usually better to use the individual Wait functions to wait for the
-required condition.
+This function waits until one of the following conditions is TRUE. Note
+that it is recommended to use the individual Wait functions to wait for
+the required condition, instead of this one.
+
+\begin{itemize}
+\item The socket becomes readable.
+\item The socket becomes writable.
+\item An ongoing connection request has completed (only for clients)
+\item An incoming connection request has arrived (only for servers)
+\item The connection has been closed.
+\end{itemize}
\wxheading{Parameters}
-\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.}
+\docparam{seconds}{Number of seconds to wait.
+If -1, it will wait for the default timeout,
+as set with \helpref{SetTimeout}{wxsocketbasesettimeout}.}
\docparam{millisecond}{Number of milliseconds to wait.}
\wxheading{Return value}
-Returns TRUE if an event occured, FALSE if the timeout was reached.
+Returns TRUE when any of the above conditions is satisfied,
+FALSE if the timeout was reached.
\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 there is data available to be read.
+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}
-\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.}
+\docparam{seconds}{Number of seconds to wait.
+If -1, it will wait for the default timeout,
+as set with \helpref{SetTimeout}{wxsocketbasesettimeout}.}
\docparam{millisecond}{Number of milliseconds to wait.}
\wxheading{Return value}
-Returns TRUE if there is data to be read, FALSE if the timeout was reached.
+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 you can write to the socket.
+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}
-\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.}
+\docparam{seconds}{Number of seconds to wait.
+If -1, it will wait for the default timeout,
+as set with \helpref{SetTimeout}{wxsocketbasesettimeout}.}
\docparam{millisecond}{Number of milliseconds to wait.}
\wxheading{Return value}
-Returns TRUE if you can write to the socket, FALSE if the timeout was reached.
+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 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}
-\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.}
+\docparam{seconds}{Number of seconds to wait.
+If -1, it will wait for the default timeout,
+as set with \helpref{SetTimeout}{wxsocketbasesettimeout}.}
\docparam{millisecond}{Number of milliseconds to wait.}
\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}
-
-% ---------------------------------------------------------------------------
-% Socket state
-% ---------------------------------------------------------------------------
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait},
+\helpref{wxSocketBase::Wait}{wxsocketbasewait}
%
-% RestoreState
+% Write
%
-\membersection{wxSocketBase::RestoreState}\label{wxsocketbaserestorestate}
-
-\func{void}{RestoreState}{\void}
-
-This function restores the previous state of the socket, as saved
-with SaveState.
-
-Calls to SaveState / RestoreState can be nested.
+\membersection{wxSocketBase::Write}\label{wxsocketbasewrite}
-\wxheading{See also}
+\func{wxSocketBase\&}{Write}{\param{const void *}{ buffer}, \param{wxUint32}{ nbytes}}
-\helpref{wxSocketBase::SaveState}{wxsocketbasesavestate}
+This function writes a buffer of {\it nbytes} bytes to the socket.
-%
-% SaveState
-%
-\membersection{wxSocketBase::SaveState}\label{wxsocketbasesavestate}
+Use \helpref{LastCount}{wxsocketbaselastcount} to verify the number of bytes actually written.
-\func{void}{SaveState}{\void}
+Use \helpref{Error}{wxsocketbaseerror} to determine if the operation succeeded.
-This function saves the current state of the socket object in a stack:
-actually it saves all flags (those set with SetFlags, SetNotify, Notify)
-and the state of the asynchronous callbacks (Callback, CallbackData).
+\wxheading{Parameters}
-Calls to SaveState / RestoreState can be nested.
+\docparam{buffer}{Buffer with the data to be sent.}
-\wxheading{See also}
+\docparam{nbytes}{Number of bytes.}
-\helpref{wxSocketBase::RestoreState}{wxsocketbaserestorestate}
+\wxheading{Return value}
-%
-% GetLocal
-%
-\membersection{wxSocketBase::GetLocal}{wxsocketbasegetlocal}
+Returns a reference to the current object.
-\constfunc{bool}{GetLocal}{\param{wxSockAddress\& }{addr\_man}}
+\wxheading{Remark/Warning}
-This function returns the local address field of the socket. The local
-address field contains the complete local address of the socket (local
-address, local port, ...).
+The exact behaviour of wxSocketBase::Write depends on the combination
+of flags being used. For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}.
-\wxheading{Return value}
+\wxheading{See also}
-It returns TRUE if no errors happened, FALSE otherwise.
+\helpref{wxSocketBase::Error}{wxsocketbaseerror},
+\helpref{wxSocketBase::LastError}{wxsocketbaselasterror},
+\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount},
+\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}
%
-% GetPeer
+% WriteMsg
%
-\membersection{wxSocketBase::GetPeer}{wxsocketbasegetlocal}
-
-\constfunc{bool}{GetPeer}{\param{wxSockAddress\& }{addr\_man}}
-
-This function returns the peer address field of the socket. The peer
-address field contains the complete peer host address of the socket
-(address, port, ...).
-
-\wxheading{Return value}
-
-It returns TRUE if no errors happened, FALSE otherwise.
+\membersection{wxSocketBase::WriteMsg}\label{wxsocketbasewritemsg}
-% ---------------------------------------------------------------------------
-% Socket callbacks
-% ---------------------------------------------------------------------------
-\membersection{wxSocketBase::SetEventHandler}\label{wxsocketbaseseteventhandler}
+\func{wxSocketBase\&}{WriteMsg}{\param{const void *}{ buffer}, \param{wxUint32}{ nbytes}}
-\func{void}{SetEventHandler}{\param{wxEvtHandler\&}{ evt\_hdlr}, \param{int}{ id = -1}}
+This function writes a buffer of {\it nbytes} bytes from the socket, but it
+writes a short header before so that \helpref{ReadMsg}{wxsocketbasereadmsg}
+knows how much data should it actually read. So, a buffer sent with WriteMsg
+{\bf must} be read with ReadMsg. This function always waits for the entire
+buffer to be sent, unless an error occurs.
-Sets an event handler to be called when a socket event occurs. The handler
-will be called for those events for which notification is enabled with
-SetNotify and Notify.
+Use \helpref{LastCount}{wxsocketbaselastcount} to verify the number of bytes actually written.
-You can also specify a callback function to be called when an event occurs.
-See \helpref{Callback}{wxsocketbasecallback} and \helpref{CallbackData}{wxsocketbasecallbackdata}.
+Use \helpref{Error}{wxsocketbaseerror} to determine if the operation succeeded.
\wxheading{Parameters}
-\docparam{evt\_hdlr}{Specifies the event handler you want to use.}
-
-\docparam{id}{The id of socket event.}
-
-\wxheading{See also}
-
-\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify},
-\helpref{wxSocketBase::Notify}{wxsocketbasenotify},
-\helpref{wxSocketEvent}{wxsocketevent},
-\helpref{wxEvtHandler}{wxevthandler},
-\helpref{wxSocketBase::Callback}{wxsocketbasecallback},
-\helpref{wxSocketBase::CallbackData}{wxsocketbasecallbackdata}
-
-\membersection{wxSocketBase::Callback}\label{wxsocketbasecallback}
-
-\func{wxSocketBase::wxSockCbk}{Callback}{\param{wxSocketBase::wxSockCbk}{ callback}}
-
-You can setup a callback function to be called when an event occurs. The function
-will be called only for those events for which notification has been enabled
-with Notify and SetNotify. The prototype of the callback must be as follows:
-
-\begin{verbatim}
-void SocketCallback(wxSocketBase& sock, wxSocketNotify evt, char *cdata);
-\end{verbatim}
+\docparam{buffer}{Buffer with the data to be sent.}
-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}.
+\docparam{nbytes}{Number of bytes to send.}
\wxheading{Return value}
-A pointer to the previous callback.
-
-\wxheading{See also}
-
-\helpref{wxSocketBase::CallbackData}{wxsocketbasecallbackdata},
-\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify},
-\helpref{wxSocketBase::Notify}{wxsocketbasenotify}
-
-\membersection{wxSocketBase::CallbackData}\label{wxsocketbasecallbackdata}
+Returns a reference to the current object.
-\func{char *}{CallbackData}{\param{char *}{cdata}}
+\wxheading{Remark/Warning}
-This function sets the the user data which will be passed to a
-callback function set via \helpref{Callback}{wxsocketbasecallback}.
+wxSocketBase::WriteMsg will behave as if the {\bf wxSOCKET\_WAITALL} flag
+was always set and it will always ignore the {\bf wxSOCKET\_NOWAIT} flag.
+The exact behaviour of WriteMsg depends on the {\bf wxSOCKET\_BLOCK} flag.
+For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}.
-\wxheading{Return value}
+\wxheading{See also}
-A pointer to the previous user data.
+\helpref{wxSocketBase::Error}{wxsocketbaseerror},
+\helpref{wxSocketBase::LastError}{wxsocketbaselasterror},
+\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount},
+\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags},
+\helpref{wxSocketBase::ReadMsg}{wxsocketbasereadmsg}
-\helpref{wxSocketBase::Callback}{wxsocketbasecallback},
-\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify},
-\helpref{wxSocketBase::Notify}{wxsocketbasenotify}
% ---------------------------------------------------------------------------
% CLASS wxSocketClient
% ---------------------------------------------------------------------------
+
\section{\class{wxSocketClient}}\label{wxsocketclient}
\wxheading{Derived from}
%
\membersection{wxSocketClient::wxSocketClient}
-\func{}{wxSocketClient}{\param{wxSockFlags}{ flags = wxSocketBase::NONE}}
+\func{}{wxSocketClient}{\param{wxSocketFlags}{ flags = wxSOCKET_NONE}}
-Constructs a new wxSocketClient.
+Constructor.
\wxheading{Parameters}
\func{}{\destruct{wxSocketClient}}{\void}
-Destroys a wxSocketClient object.
+Destructor.
%
% Connect
Connects to a server using the specified address.
-If {\it wait} is TRUE, Connect will wait until the connection completes
-successfully, or until an event occurs. {\bf Warning !} This will block the GUI.
+If {\it wait} is TRUE, Connect will wait until the connection completes.
+{\bf Warning:} This will block the GUI.
If {\it wait} is FALSE, Connect will try to establish the connection and
return immediately, without blocking the GUI. When used this way, even if
Connect returns FALSE, the connection request can be completed later.
-To detect this, use WaitConnection, or catch {\bf wxSOCKET\_CONNECTION}
-events (for successful establishment) and {\bf wxSOCKET\_LOST} events
-(for connection failure).
+To detect this, use \helpref{WaitOnConnect}{wxsocketclientwaitonconnect},
+or catch {\bf wxSOCKET\_CONNECTION} events (for successful establishment)
+and {\bf wxSOCKET\_LOST} events (for connection failure).
\wxheading{Parameters}
\docparam{address}{Address of the server.}
-\docparam{wait}{If TRUE, waits for the connection to be ready.}
+\docparam{wait}{If TRUE, waits for the connection to complete.}
\wxheading{Return value}
If {\it wait} was FALSE, and Connect returns FALSE, you should still
be prepared to handle the completion of this connection request, either
-with WaitOnConnect or by watching {\bf wxSOCKET\_CONNECTION} and
-{\bf wxSOCKET\_LOST} events.
+with \helpref{WaitOnConnect}{wxsocketclientwaitonconnect} or by watching
+{\bf wxSOCKET\_CONNECTION} and {\bf wxSOCKET\_LOST} events.
\wxheading{See also}
\func{bool}{WaitOnConnect}{\param{long}{ seconds = -1}, \param{long}{ milliseconds = 0}}
-Wait until the connection is succesfully established or until it fails.
-Use this function after a call to Connect with {\it wait} set to FALSE.
+Wait until a connection request completes, or until the specified timeout
+elapses. Use this function after issuing a call to \helpref{Connect}{wxsocketclientconnect}
+with {\it wait} set to FALSE.
\wxheading{Parameters}
-\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.}
+\docparam{seconds}{Number of seconds to wait.
+If -1, it will wait for the default timeout,
+as set with \helpref{SetTimeout}{wxsocketbasesettimeout}.}
\docparam{millisecond}{Number of milliseconds to wait.}
\wxheading{Return value}
-If the connection is succesfully established, it returns TRUE.
+WaitOnConnect returns TRUE if the connection request completes. This
+does not necessarily mean that the connection was succesfully established;
+it might also happen that the connection was refused by the peer. Use
+\helpref{IsConnected}{wxsocketbaseisconnected} to distinguish between
+these two situations.
+
+If the timeout elapses, WaitOnConnect returns FALSE.
-If the timeout expires, or if the connection fails, it returns FALSE.
+These semantics allow code like this:
+
+\begin{verbatim}
+// Issue the connection request
+client->Connect(addr, FALSE);
+
+// Wait until the request completes or until we decide to give up
+bool waitmore = TRUE;
+while ( !client->WaitOnConnect(seconds, millis) && waitmore )
+{
+ // possibly give some feedback to the user,
+ // and update waitmore if needed.
+}
+bool success = client->IsConnected();
+\end{verbatim}
\wxheading{See also}
-\helpref{wxSocketClient::Connect}{wxsocketclientconnect}
+\helpref{wxSocketClient::Connect}{wxsocketclientconnect},
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait},
+\helpref{wxSocketBase::IsConnected}{wxsocketbaseisconnected}
% ---------------------------------------------------------------------------
% CLASS: wxSocketEvent
\twocolwidtha{7cm}
\begin{twocollist}\itemsep=0pt
\twocolitem{{\bf EVT\_SOCKET(id, func)}}{Process a socket event, supplying the member function.}
-\end{twocollist}%
+\end{twocollist}
\wxheading{See also}
Constructor.
-\membersection{wxSocketEvent::Socket}\label{wxsocketeventsocket}
+\membersection{wxSocketEvent::GetClientData}\label{wxsocketeventgetclientdata}
-\constfunc{wxSocketBase *}{Socket}{\void}
+\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}
Returns the socket object to which this event refers to. This makes
it possible to use the same event handler for different sockets.
-\membersection{wxSocketEvent::SocketEvent}\label{wxsocketeventsocketevent}
+\membersection{wxSocketEvent::GetSocketEvent}\label{wxsocketeventgetsocketevent}
-\constfunc{wxSocketNotify}{SocketEvent}{\void}
+\constfunc{wxSocketNotify}{GetSocketEvent}{\void}
Returns the socket event type.
%
\membersection{wxSocketServer::wxSocketServer}\label{wxsocketserverconstr}
-\func{}{wxSocketServer}{\param{wxSockAddress\&}{ address}, \param{wxSockFlags}{ flags = wxSocketBase::NONE}}
+\func{}{wxSocketServer}{\param{wxSockAddress\&}{ address}, \param{wxSocketFlags}{ flags = wxSOCKET_NONE}}
-Constructs a new wxSocketServer.
+Constructs a new server and tries to bind to the specified {\it address}.
+Before trying to accept new connections, test whether it succeeded with
+\helpref{wxSocketBase::Ok}{wxsocketbaseok}.
\wxheading{Parameters}
\func{}{\destruct{wxSocketServer}}{\void}
-Destroys a wxSocketServer object (it doesn't close the accepted connections).
+Destructor (it doesn't close the accepted connections).
%
% Accept
\func{wxSocketBase *}{Accept}{\param{bool}{ wait = TRUE}}
-Creates a new object wxSocketBase and accepts an incoming connection.
+Accepts an incoming connection request, and creates a new
+\helpref{wxSocketBase}{wxsocketbase} object which represents
+the server-side of the connection.
If {\it wait} is TRUE and there are no pending connections to be
accepted, it will wait for the next incoming connection to arrive.
-{\bf Warning !} This will block the GUI.
+{\bf Warning:} This will block the GUI.
If {\it wait} is FALSE, it will try to accept a pending connection
-if there is one, but it will always return immediately without
-blocking the GUI. If you want to use Accept in this way, you can
-either check for incoming connections with WaitForAccept or watch
-{\bf wxSOCKET\_CONNECTION} events, then call Accept once you know
+if there is one, but it will always return immediately without blocking
+the GUI. If you want to use Accept in this way, you can either check for
+incoming connections with \helpref{WaitForAccept}{wxsocketserverwaitforaccept}
+or catch {\bf wxSOCKET\_CONNECTION} events, then call Accept once you know
that there is an incoming connection waiting to be accepted.
\wxheading{Return value}
\func{bool}{WaitForAccept}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}}
This function waits for an incoming connection. Use it if you want to call
-Accept or AcceptWith with {\it wait} set to FALSE, to detect when an incoming
-connection is waiting to be accepted.
+\helpref{Accept}{wxsocketserveraccept} or \helpref{AcceptWith}{wxsocketserveracceptwith}
+with {\it wait} set to FALSE, to detect when an incoming connection is waiting
+to be accepted.
\wxheading{Parameters}
-\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.}
+\docparam{seconds}{Number of seconds to wait.
+If -1, it will wait for the default timeout,
+as set with \helpref{SetTimeout}{wxsocketbasesettimeout}.}
\docparam{millisecond}{Number of milliseconds to wait.}
\wxheading{Return value}
-Returns TRUE if an incoming connection arrived, FALSE if the timeout expired.
+Returns TRUE if an incoming connection arrived, FALSE if the timeout elapsed.
\wxheading{See also}
\helpref{wxSocketServer::Accept}{wxsocketserveraccept},
-\helpref{wxSocketServer::AcceptWith}{wxsocketserveracceptwith}
+\helpref{wxSocketServer::AcceptWith}{wxsocketserveracceptwith},
+\helpref{wxSocketBase::InterruptWait}{wxsocketbaseinterruptwait}