X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7e9a386e10bf434956b4deb1e9a1cd45693c947f..5f445b310b239ea4d26996d4384899c66aa833c5:/docs/latex/wx/socket.tex diff --git a/docs/latex/wx/socket.tex b/docs/latex/wx/socket.tex index 26fb37c2d3..bcc46c9218 100644 --- a/docs/latex/wx/socket.tex +++ b/docs/latex/wx/socket.tex @@ -8,7 +8,7 @@ -\wxheading{wxSocket errors}%\label{wxsocketerrs} % Labels don't work on a non-section! +\wxheading{wxSocket errors} \twocolwidtha{7cm} \begin{twocollist}\itemsep=0pt @@ -19,7 +19,8 @@ \twocolitem{{\bf wxSOCKET\_INVSOCK}}{Invalid socket (uninitialized).} \twocolitem{{\bf wxSOCKET\_NOHOST}}{No corresponding host.} \twocolitem{{\bf wxSOCKET\_INVPORT}}{Invalid port.} -\twocolitem{{\bf wxSOCKET\_TRYAGAIN}}{The IO call has a timeout or is in non-blocking mode.} +\twocolitem{{\bf wxSOCKET\_WOULDBLOCK}}{The socket is non-blocking and the operation would block.} +\twocolitem{{\bf wxSOCKET\_TIMEDOUT}}{The timeout for this operation expired.} \twocolitem{{\bf wxSOCKET\_MEMERR}}{Memory exhausted.} \end{twocollist}% @@ -27,21 +28,39 @@ \twocolwidtha{7cm} \begin{twocollist}\itemsep=0pt -\twocolitem{{\bf wxSOCKET\_INPUT}}{Some data are ready to be got.} +\twocolitem{{\bf wxSOCKET\_INPUT}}{Some data has arrived to the socket.} \twocolitem{{\bf wxSOCKET\_OUTPUT}}{The socket is ready to be written to.} -\twocolitem{{\bf wxSOCKET\_CONNECTION}}{Someone want to connect our server.} -\twocolitem{{\bf wxSOCKET\_LOST}}{The connection has been broken.} +\twocolitem{{\bf wxSOCKET\_CONNECTION}}{Incoming connection arrival (server), or connection establishment (client).} +\twocolitem{{\bf wxSOCKET\_LOST}}{The connection has been closed.} \twocolitem{{\bf wxSOCKET\_MAX\_EVENT}}{This should never happen but the compiler may complain about it.} \end{twocollist}% +A brief note on how to use these events: + +The {\bf wxSOCKET\_INPUT} event will be issued when the incoming queue +was empty and new data arrives, but NOT if new data arrives when there +was data waiting in the incoming queue. + +The {\bf wxSOCKET\_OUTPUT} event is issued when a socket is first connected +with Connect or accepted with Accept, and then, only after an output operation +fails because the output buffer was full, and buffer space becomes available +again. + +The {\bf wxSOCKET\_CONNECTION} event is issued when a connection request +completes (client) or when a new connection arrives at the pending +connections queue (server). + +The {\bf wxSOCKET\_LOST} event is issued when a close indication is +received for the socket. This means that the connection broke down or +that it was closed by the peer. + % --------------------------------------------------------------------------- % 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. +input to member functions that take a \helpref{wxSocketEvent}{wxsocketevent} argument. \twocolwidtha{7cm}% \begin{twocollist}\itemsep=0pt @@ -53,8 +72,8 @@ functions that take a \helpref{wxSocketEvent}{wxsocketevent} argument. % --------------------------------------------------------------------------- \wxheading{See also} -\helpref{wxSocketEvent}{wxsocketevent}\\ -\helpref{wxSocketClient}{wxsocketclient}\\ +\helpref{wxSocketEvent}{wxsocketevent}, +\helpref{wxSocketClient}{wxsocketclient}, \helpref{wxSocketServer}{wxsocketserver} % --------------------------------------------------------------------------- @@ -66,7 +85,7 @@ functions that take a \helpref{wxSocketEvent}{wxsocketevent} argument. \func{}{wxSocketBase}{\void} -Default constructor but don't use it, you must use \helpref{wxSocketClient}{wxsocketclient} +Default constructor. Don't use it; use \helpref{wxSocketClient}{wxsocketclient} or \helpref{wxSocketServer}{wxsocketserver}. \membersection{wxSocketBase::\destruct{wxSocketBase}} @@ -89,36 +108,80 @@ Destroys the wxSocketBase object. \twocolwidtha{7cm} \begin{twocollist}\itemsep=0pt -\twocolitem{{\bf wxSocketBase::NONE}}{Normal functionnalities.} -\twocolitem{{\bf wxSocketBase::NOWAIT}}{Get the available data in the input queue and exit immediately.} -\twocolitem{{\bf wxSocketBase::WAITALL}}{Wait for all required data unless an error occured.} -\twocolitem{{\bf wxSocketBase::SPEED}}{Disable the asynchronous IO functionnality.} +\twocolitem{{\bf wxSOCKET\_NONE}}{Normal functionnality.} +\twocolitem{{\bf wxSOCKET\_NOWAIT}}{Get the available data in the input queue and return immediately.} +\twocolitem{{\bf wxSOCKET\_WAITALL}}{Wait for all required data unless an error occurs.} +\twocolitem{{\bf wxSOCKET\_BLOCK}}{Block the GUI (do not wxYield) while reading/writing data.} \end{twocollist} +A brief overview on how to use these flags follows. + +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. + +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. + +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. + +The {\bf wxSOCKET\_BLOCK} 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. + +So: + +{\bf wxSOCKET\_NONE} will try to read 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 control whether the GUI blocks. + % % SetNotify % \membersection{wxSocketBase::SetNotify}\label{wxsocketbasesetnotify} -\func{void}{SetNotify}{\param{wxSocketEventFlags}{ event_flags}} +\func{void}{SetNotify}{\param{wxSocketEventFlags}{ flags}} -SetNotify setups which socket events are to be sent to the event handler. -You specify in parameters a mask of wxSocket events. The flags is: +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: \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} +\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}% For example: + \begin{verbatim} - sock.SetNotify(wxSOCKET\_INPUT\_FLAG | wxSOCKET\_LOST\_FLAG); + sock.SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG); \end{verbatim} -In this example, the user will be notified about incoming socket datas and -a broken connection. + +In this example, the user will be notified about incoming socket data and +whenever the connection is closed. For more information on socket events see \helpref{wxSocket events}{wxsocketbase}. @@ -129,7 +192,10 @@ For more information on socket events see \helpref{wxSocket events}{wxsocketbase \func{void}{SetTimeout}{\param{int }{seconds}} -This function sets the socket timeout in seconds. +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. % % Notify @@ -156,7 +222,10 @@ cases. \constfunc{bool}{Error}{\void} -Returns TRUE if an error occured. +Returns TRUE if an error occured in the last IO operation. + +The following operations update the Error() status: +Read, Write, ReadMsg, WriteMsg, Peek, Unread, Discard. \membersection{wxSocketBase::IsConnected}\label{wxsocketbaseconnected} @@ -168,7 +237,7 @@ Returns TRUE if the socket is connected. \constfunc{bool}{IsData}{\void} -Returns TRUE if some data is arrived on the socket. +Returns TRUE if there is data available to be read. \membersection{wxSocketBase::IsDisconnected}\label{wxsocketbasedisconnected} @@ -188,11 +257,21 @@ Returns TRUE if the socket mustn't wait. Returns the number of bytes read or written by the last IO call. +The following operations update the LastCount() value: +Read, Write, ReadMsg, WriteMsg, Peek, Unread, Discard. + \membersection{wxSocketBase::LastError}\label{wxsocketbaselasterror} \constfunc{wxSocketError}{LastError}{\void} -Returns the last occured wxSocket error. See \helpref{wxSocket errors}{wxsocketbase}. +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 tha 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. % --------------------------------------------------------------------------- % IO calls @@ -207,6 +286,10 @@ Returns the last occured wxSocket error. See \helpref{wxSocket errors}{wxsocketb This function peeks a buffer of {\it nbytes} bytes from the socket. Peeking a buffer doesn't delete it from the system socket in-queue. +Use LastCount to verify the number of bytes actually peeked. + +Use Error to determine if the operation succeeded. + \wxheading{Parameters} \docparam{buffer}{Buffer where to put peeked data.} @@ -217,11 +300,17 @@ doesn't delete it from the system socket in-queue. Returns a reference to the current object. +\wxheading{Remark/Warning} + +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} -\helpref{wxSocketBase::Error}{wxsocketbaseerror}\\ -\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}\\ -\helpref{wxSocketBase::LastError}{wxsocketbaselasterror} +\helpref{wxSocketBase::Error}{wxsocketbaseerror}, +\helpref{wxSocketBase::LastError}{wxsocketbaselasterror}, +\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}, +\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags} % % Read @@ -232,6 +321,10 @@ Returns a reference to the current object. This function reads a buffer of {\it nbytes} bytes from the socket. +Use LastCount to verify the number of bytes actually read. + +Use Error to determine if the operation succeeded. + \wxheading{Parameters} \docparam{buffer}{Buffer where to put read data.} @@ -244,23 +337,15 @@ Returns a reference to the current object. \wxheading{Remark/Warning} -By default, Read uses an internal asynchronous manager: it will send data when -the socket requests them. It is particularly interesting when you enter a long -data transfer (e.g. a big file, an image, ...). But it is also buggy when you -simply discuss with the peer using user data. In this case, wxSocket prepares -itself to send data (Write wait for them to be sent) and during a GUI refresh -the user enters new data, which involves a new Read call though the previous -isn't finished. Well, in most cases it can work but it might fail too. -So I advise you to use the SPEED flag, which disables the asynchronous manager, -when you just want to discuss with the peer. - -This remark is also valid for all IO call. +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::LastCount}{wxsocketbaselastcount}, - \helpref{wxSocketBase::LastError}{wxsocketbaselasterror} +\helpref{wxSocketBase::Error}{wxsocketbaseerror}, +\helpref{wxSocketBase::LastError}{wxsocketbaselasterror}, +\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}, +\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags} % % Write @@ -269,23 +354,15 @@ This remark is also valid for all IO call. \func{wxSocketBase\&}{Write}{\param{const char *}{ buffer}, \param{wxUint32}{ nbytes}} -This function writes a buffer of {\it nbytes} bytes from the socket. +This function writes a buffer of {\it nbytes} bytes to the socket. -\wxheading{Remark/Warning} +Use LastCount to verify the number of bytes actually written. -By default, Write uses an internal asynchronous manager: it will send data when -the socket requests them. It is particularly interesting when you enter a long -data transfer (e.g. a big file, an image, ...). But it is also buggy when you -simply discuss with the peer using user data. In this case, wxSocket prepares -itself to send data (Write wait for them to be sent) and during a GUI refresh -the user enters new data, which involves a new Write call though the previous -isn't finished. Well, in most cases it can work but it might fail too. -So I advise you to use the SPEED flag, which disables the asynchronous manager, -when you just want to discuss with the peer. +Use Error to determine if the operation succeeded. \wxheading{Parameters} -\docparam{buffer}{Buffer where to get the data to write.} +\docparam{buffer}{Buffer with the data to be sent.} \docparam{nbytes}{Number of bytes.} @@ -293,11 +370,17 @@ when you just want to discuss with the peer. Returns a reference to the current object. +\wxheading{Remark/Warning} + +The exact behaviour of wxSocketBase::Write() 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::LastCount}{wxsocketbaselastcount}\\ -\helpref{wxSocketBase::LastError}{wxsocketbaselasterror} +\helpref{wxSocketBase::Error}{wxsocketbaseerror}, +\helpref{wxSocketBase::LastError}{wxsocketbaselasterror}, +\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}, +\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags} % % WriteMsg @@ -306,13 +389,19 @@ Returns a reference to the current object. \func{wxSocketBase\&}{WriteMsg}{\param{const char *}{ buffer}, \param{wxUint32}{ nbytes}} -This function writes a buffer of {\it nbytes} bytes from the socket. But it +This function writes a buffer of {\it nbytes} bytes from the socket, but it writes a short header before so that ReadMsg can alloc the right size for -the buffer. So a buffer sent with WriteMsg {\bf must} be read with ReadMsg. +the buffer. 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 where to put data peeked.} +\docparam{buffer}{Buffer with the data to be sent.} \docparam{nbytes}{Number of bytes.} @@ -320,11 +409,18 @@ the buffer. So a buffer sent with WriteMsg {\bf must} be read with ReadMsg. Returns a reference to the current object. +\wxheading{Remark/Warning} + +wxSocketBase::WriteMsg() will behave as if the wxSOCKET_WAITALL flag was always set +and it will always ignore the wxSOCKET_NOWAIT flag. The exact behaviour of WriteMsg +depends on the wxSOCKET_BLOCK flag. For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}. + \wxheading{See also} -\helpref{wxSocketBase::Error}{wxsocketbaseerror}\\ -\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}\\ -\helpref{wxSocketBase::LastError}{wxsocketbaselasterror}\\ +\helpref{wxSocketBase::Error}{wxsocketbaseerror}, +\helpref{wxSocketBase::LastError}{wxsocketbaselasterror}, +\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}, +\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}, \helpref{wxSocketBase::ReadMsg}{wxsocketbasereadmsg} % @@ -335,8 +431,12 @@ Returns a reference to the current object. \func{wxSocketBase\&}{ReadMsg}{\param{char *}{ 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 function filled it and then discard the -bytes left. This function always wait for the buffer to be entirely filled. +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 Error to determine if the operation succeeded. \wxheading{Parameters} @@ -348,11 +448,18 @@ bytes left. This function always wait for the buffer to be entirely filled. Returns a reference to the current object. +\wxheading{Remark/Warning} + +wxSocketBase::ReadMsg() will behave as if the wxSOCKET_WAITALL flag was always set +and it will always ignore the wxSOCKET_NOWAIT flag. The exact behaviour of ReadMsg +depends on the wxSOCKET_SPEED flag. For a detailed explanation, see \helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}. + \wxheading{See also} -\helpref{wxSocketBase::Error}{wxsocketbaseerror}\\ -\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}\\ -\helpref{wxSocketBase::LastError}{wxsocketbaselasterror}\\ +\helpref{wxSocketBase::Error}{wxsocketbaseerror}, +\helpref{wxSocketBase::LastError}{wxsocketbaselasterror}, +\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}, +\helpref{wxSocketBase::SetFlags}{wxsocketbasesetflags}, \helpref{wxSocketBase::WriteMsg}{wxsocketbasewritemsg} % @@ -362,9 +469,12 @@ Returns a reference to the current object. \func{wxSocketBase\&}{Unread}{\param{const char *}{ buffer}, \param{wxUint32}{ nbytes}} -This function unreads a buffer. It means that the buffer is put in the top -of the incoming queue. But, it is put also at the end of all unread buffers. -It is useful for sockets because we can't seek it. +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 Error, it will always return FALSE. \wxheading{Parameters} @@ -378,8 +488,8 @@ Returns a reference to the current object. \wxheading{See also} -\helpref{wxSocketBase::Error}{wxsocketbaseerror}\\ -\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}\\ +\helpref{wxSocketBase::Error}{wxsocketbaseerror}, +\helpref{wxSocketBase::LastCount}{wxsocketbaselastcount}, \helpref{wxSocketBase::LastError}{wxsocketbaselasterror} % @@ -390,7 +500,12 @@ Returns a reference to the current object. \func{wxSocketBase\&}{Discard}{\void} This function simply deletes all bytes in the incoming queue. This function -doesn't wait. +doesn't wait. That is, it will behave as if the wxSOCKET\_NOWAIT flag was set. The +wxSOCKET\_SPEED and wxSOCKET\_WAITALL flags have no effect on this function. + +Use LastCount to see the number of bytes discarded. + +If you use Error, it will always return FALSE. % --------------------------------------------------------------------------- % Wait functions @@ -399,13 +514,14 @@ doesn't wait. \func{bool}{Wait}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}} -This function waits for an event: it could be an incoming byte, the possibility -for the client to write, a lost connection, an incoming connection, an -established connection. +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). \wxheading{Parameters} -\docparam{seconds}{Number of seconds to wait. By default, it waits infinitely.} +\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.} \docparam{millisecond}{Number of milliseconds to wait.} @@ -415,8 +531,8 @@ Returns TRUE if an event occured, FALSE if the timeout was reached. \wxheading{See also} -\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread}\\ -\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite}\\ +\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread}, +\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite}, \helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost} % @@ -426,22 +542,22 @@ Returns TRUE if an event occured, FALSE if the timeout was reached. \func{bool}{WaitForRead}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}} -This function waits for a read event. +This function waits until there is data available to be read. \wxheading{Parameters} -\docparam{seconds}{Number of seconds to wait. By default, it waits infinitely.} +\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.} \docparam{millisecond}{Number of milliseconds to wait.} \wxheading{Return value} -Returns TRUE if a byte arrived, FALSE if the timeout was reached. +Returns TRUE if there is data to be read, FALSE if the timeout was reached. \wxheading{See also} -\helpref{wxSocketBase::Wait}{wxsocketbasewait}\\ -\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite}\\ +\helpref{wxSocketBase::Wait}{wxsocketbasewait}, +\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite}, \helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost} % @@ -451,22 +567,22 @@ Returns TRUE if a byte arrived, FALSE if the timeout was reached. \func{bool}{WaitForWrite}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}} -This function waits for a write event. +This function waits until you can write to the socket. \wxheading{Parameters} -\docparam{seconds}{Number of seconds to wait. By default, it waits infinitely.} +\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.} \docparam{millisecond}{Number of milliseconds to wait.} \wxheading{Return value} -Returns TRUE if a write event occured, FALSE if the timeout was reached. +Returns TRUE if you can write to the socket, FALSE if the timeout was reached. \wxheading{See also} -\helpref{wxSocketBase::Wait}{wxsocketbasewait}\\ -\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread}\\ +\helpref{wxSocketBase::Wait}{wxsocketbasewait}, +\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread}, \helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost} % @@ -476,25 +592,29 @@ Returns TRUE if a write event occured, FALSE if the timeout was reached. \func{bool}{Wait}{\param{long}{ seconds = -1}, \param{long}{ millisecond = 0}} -This function waits for a "lost" event. For instance, the peer may have closed -the connection, or the connection may have been broken. +This function waits until the connection is lost. This may happen if the +peer closes the connection or if the connection breaks. \wxheading{Parameters} -\docparam{seconds}{Number of seconds to wait. By default, it waits infinitely.} +\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.} \docparam{millisecond}{Number of milliseconds to wait.} \wxheading{Return value} -Returns TRUE if a "lost" event occured, FALSE if the timeout was reached. +Returns TRUE if the connection was lost, FALSE if the timeout was reached. \wxheading{See also} -\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread}\\ -\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite}\\ +\helpref{wxSocketBase::WaitForRead}{wxsocketbasewaitforread}, +\helpref{wxSocketBase::WaitForWrite}{wxsocketbasewaitforwrite}, \helpref{wxSocketBase::WaitForLost}{wxsocketbasewaitforlost} +% --------------------------------------------------------------------------- +% Socket state +% --------------------------------------------------------------------------- + % % RestoreState % @@ -502,16 +622,15 @@ Returns TRUE if a "lost" event occured, FALSE if the timeout was reached. \func{void}{RestoreState}{\void} -This function restores the previous state of the socket (include flags, -notify flags, notify state, C callback function and data). +This function restores the previous state of the socket, as saved +with SaveState. + +Calls to SaveState / RestoreState can be nested. \wxheading{See also} \helpref{wxSocketBase::SaveState}{wxsocketbasesavestate} -% --------------------------------------------------------------------------- -% Socket state -% --------------------------------------------------------------------------- % % SaveState % @@ -520,7 +639,10 @@ notify flags, notify state, C callback function and data). \func{void}{SaveState}{\void} This function saves the current state of the socket object in a stack: -actually it saves all flags and the state of the asynchronous callbacks. +actually it saves all flags (those set with SetFlags, SetNotify, Notfy) +and the state of the asynchronous callbacks (Callback, CallbackData). + +Calls to SaveState / RestoreState can be nested. \wxheading{See also} @@ -563,7 +685,12 @@ It returns TRUE if no errors happened, FALSE otherwise. \func{void}{SetEventHandler}{\param{wxEvtHandler\&}{ evt\_hdlr}, \param{int}{ id = -1}} -Sets an event handler to be called when a socket event occured. +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. + +You can also specify a C callback to be called when an event occurs. See +Callback and CallbackData. \wxheading{Parameters} @@ -573,43 +700,52 @@ Sets an event handler to be called when a socket event occured. \wxheading{See also} -\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify} -\helpref{wxSocketBase::Notify}{wxsocketbasenotify} -\helpref{wxSocketEvent}{wxsocketevent} -\helpref{wxEvtHandler}{wxevthandler} +\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}} -wxSocket event handler can call C callback. This function allows you to set it. -The format of the callback is as followed: +You can setup a C callback to be called when an event occurs. The callback +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} -The first parameter reminds you of the caller socket. The second parameter -informs you about the current event (See \helpref{wxSocket events}{wxsocketbase}). -The third parameters is the client data you specified using \helpref{CallbackData}{wxsocketcallbackdata}. +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}. \wxheading{Return value} -It returns the previous callback. +A pointer to the previous callback. \wxheading{See also} -\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify} +\helpref{wxSocketBase::CallbackData}{wxsocketbasecallbackdata}, +\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify}, \helpref{wxSocketBase::Notify}{wxsocketbasenotify} -\membersection{wxSocketBase::CallbackData}\label{wxsocketcallbackdata} +\membersection{wxSocketBase::CallbackData}\label{wxsocketbasecallbackdata} \func{char *}{CallbackData}{\param{char *}{cdata}} -This function sets the the client data which will be passed to a \helpref{C callback}{wxsocketbasecallback}. +This function sets the the user data which will be passed to a \helpref{C callback}{wxsocketbasecallback}. \wxheading{Return value} -This function returns the old value of the client data pointer. +A pointer to the previous user data. + +\helpref{wxSocketBase::Callback}{wxsocketbasecallback}, +\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify}, +\helpref{wxSocketBase::Notify}{wxsocketbasenotify} % --------------------------------------------------------------------------- % CLASS wxSocketClient @@ -656,8 +792,18 @@ Destroys a wxSocketClient object. \func{bool}{Connect}{\param{wxSockAddress\&}{ address}, \param{bool}{ wait = TRUE}} -Connects to a server using the specified address. If {\it wait} is TRUE, Connect -will wait for the socket ready to send or receive data. +Connects to a server using the specified address. + +If {\it wait} is TRUE, Connect will wait until the connection completes and +the socket is ready to send or receive data, or until an event occurs. + +{\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 watch "connection" events (for +succesful establishment) and "lost" events (for connection failure). \wxheading{Parameters} @@ -669,9 +815,18 @@ will wait for the socket ready to send or receive data. Returns TRUE if the connection is established and no error occurs. +If {\it wait} was TRUE, and Connect returns FALSE, an error occured +and the connection failed. + +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 "connection" and "lost" events. + \wxheading{See also} -\helpref{wxSocketClient::WaitOnConnect}{wxsocketclientwaitonconnect} +\helpref{wxSocketClient::WaitOnConnect}{wxsocketclientwaitonconnect}, +\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify}, +\helpref{wxSocketBase::Notify}{wxsocketbasenotify} % % WaitOnConnect @@ -680,11 +835,24 @@ Returns TRUE if the connection is established and no error occurs. \func{bool}{WaitOnConnect}{\param{long}{ seconds = -1}, \param{long}{ milliseconds = 0}} -Wait for a "connect" event. +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. + +\wxheading{Parameters} + +\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.} + +\docparam{millisecond}{Number of milliseconds to wait.} + +\wxheading{Return value} + +If the connection is succesfully established, it returns TRUE. + +If the timeout expires, or if the connection fails, it returns FALSE. \wxheading{See also} -\helpref{wxSocketBase::Wait}{wxsocketbasewait} for a detailed description. +\helpref{wxSocketClient::Connect}{wxsocketclientconnect} % --------------------------------------------------------------------------- % CLASS: wxSocketEvent @@ -711,10 +879,14 @@ functions that take a wxSocketEvent argument. \twocolitem{{\bf EVT\_SOCKET(id, func)}}{Process a socket event, supplying the member function.} \end{twocollist}% +[TODO:] +A brief note on how to use events. +The wxSOCKET_INPUT event is generated when the + \wxheading{See also} -\helpref{wxSocketBase}{wxsocketbase},\rtfsp -\helpref{wxSocketClient}{wxsocketclient},\rtfsp +\helpref{wxSocketBase}{wxsocketbase}, +\helpref{wxSocketClient}{wxsocketclient}, \helpref{wxSocketServer}{wxsocketserver} \latexignore{\rtfignore{\wxheading{Members}}} @@ -771,23 +943,39 @@ Constructs a new wxSocketServer. \func{}{\destruct{wxSocketServer}}{\void} -Destroys a wxSocketServer object (it doesn't close the accepted connection). +Destroys a wxSocketServer object (it doesn't close the accepted connections). % % Accept % -\membersection{wxSocketServer::Accept} +\membersection{wxSocketServer::Accept}\label{wxsocketserveraccept} + +\func{wxSocketBase *}{Accept}{\param{bool}{ wait = TRUE}} + +Creates a new object wxSocketBase and accepts an incoming connection. -\func{wxSocketBase *}{Accept}{\void} +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. -Creates a new object wxSocketBase and accepts an incoming connection. {\bf Warning !} This function 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 +"connection" events, then call Accept once you know that there is +an incoming connection waiting to be accepted. \wxheading{Return value} -Returns an opened socket connection. +Returns an opened socket connection, or NULL if an error occured or +if the {\it wait} parameter was FALSE and there were no pending +connections. \wxheading{See also} +\helpref{wxSocketServer::WaitForAccept}{wxsocketserverwaitforaccept}, +\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify}, +\helpref{wxSocketBase::Notify}{wxsocketbasenotify}, \helpref{wxSocketServer::AcceptWith}{wxsocketserveracceptwith} % @@ -795,7 +983,7 @@ Returns an opened socket connection. % \membersection{wxSocketServer::AcceptWith}\label{wxsocketserveracceptwith} -\func{bool}{AcceptWith}{\param{wxSocketBase\&}{ socket}} +\func{bool}{AcceptWith}{\param{wxSocketBase\&}{ socket}, \param{bool}{ wait = TRUE}} Accept an incoming connection using the specified socket object. This is useful when someone wants to inherit wxSocketBase. @@ -806,5 +994,38 @@ This is useful when someone wants to inherit wxSocketBase. \wxheading{Return value} -Returns TRUE if no error occurs, else FALSE. +Returns TRUE on success, or FALSE if an error occured or if the +{\it wait} parameter was FALSE and there were no pending +connections. + +\helpref{wxSocketServer::WaitForAccept}{wxsocketserverwaitforaccept}, +\helpref{wxSocketBase::SetNotify}{wxsocketbasesetnotify}, +\helpref{wxSocketBase::Notify}{wxsocketbasenotify}, +\helpref{wxSocketServer::Accept}{wxsocketserveraccept} + +% +% WaitForAccept +% +\membersection{wxSocketServer::WaitForAccept}\label{wxsocketserverwaitforaccept} + +\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. + +\wxheading{Parameters} + +\docparam{seconds}{Number of seconds to wait. If -1, it will wait for the default timeout set with SetTimeout.} + +\docparam{millisecond}{Number of milliseconds to wait.} + +\wxheading{Return value} + +Returns TRUE if an incoming connection arrived, FALSE if the timeout expired. + +\wxheading{See also} + +\helpref{wxSocketServer::Accept}{wxsocketserveraccept}, +\helpref{wxSocketServer::AcceptWith}{wxsocketserveracceptwith}