]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/socket.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxIP*address, wxSocket* classes 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  12     A class for working with IPv4 network addresses. 
  17 class wxIPV4address 
: public wxIPaddress
 
  21         Set address to any of the addresses of the current machine. 
  23         Whenever possible, use this function instead of LocalHost(), 
  24         as this correctly handles multi-homed hosts and avoids other small 
  25         problems. Internally, this is the same as setting the IP address 
  28         @return @true on success, @false if something went wrong. 
  33         Set the address to hostname, which can be a host name or an IP-style address 
  34         in dot notation(<tt>a.b.c.d</tt>). 
  36         @return @true on success, @false if something goes wrong (invalid 
  37                 hostname or invalid IP address). 
  39     bool Hostname(const wxString
& hostname
); 
  42         Returns the hostname which matches the IP address. 
  44     virtual wxString 
Hostname() const; 
  47         Returns a wxString containing the IP address in dot quad (127.0.0.1) format. 
  49     virtual wxString 
IPAddress() const; 
  52         Set address to localhost (127.0.0.1). 
  54         Whenever possible, use AnyAddress() instead of this one, as that one will 
  55         correctly handle multi-homed hosts and avoid other small problems. 
  57         @return @true on success, @false if something went wrong. 
  62         Set the port to that corresponding to the specified @a service. 
  64         @return @true on success, @false if something goes wrong (invalid @a service). 
  66     bool Service(const wxString
& service
); 
  69         Set the port to that corresponding to the specified @a service. 
  71         @return @true on success, @false if something goes wrong (invalid @a service). 
  73     bool Service(unsigned short service
) = 0; 
  76         Returns the current service. 
  78     unsigned short Service() const = 0; 
  91 class wxSocketServer 
: public wxSocketBase
 
  95         Constructs a new server and tries to bind to the specified @e address. 
  97         Before trying to accept new connections, remember to test whether it succeeded 
  98         with wxSocketBase:IsOk(). 
 101             Specifies the local address for the server (e.g. port number). 
 103             Socket flags (See wxSocketBase::SetFlags()). 
 105     wxSocketServer(const wxSockAddress
& address
, 
 106                    wxSocketFlags flags 
= wxSOCKET_NONE
); 
 109         Destructor (it doesn't close the accepted connections). 
 111     virtual ~wxSocketServer(); 
 114         Accepts an incoming connection request, and creates a new wxSocketBase 
 115         object which represents the server-side of the connection. 
 117         If @a wait is @true and there are no pending connections to be 
 118         accepted, it will wait for the next incoming connection to 
 121         @warning: This method will block the GUI. 
 123         If @a wait is @false, it will try to accept a pending connection 
 124         if there is one, but it will always return immediately without blocking 
 125         the GUI. If you want to use Accept() in this way, you can either check for 
 126         incoming connections with WaitForAccept() or catch @b wxSOCKET_CONNECTION events, 
 127         then call Accept() once you know that there is an incoming connection waiting 
 130         @return Returns an opened socket connection, or @NULL if an error 
 131                 occurred or if the wait parameter was @false and there 
 132                 were no pending connections. 
 134         @see WaitForAccept(), wxSocketBase::SetNotify(), 
 135              wxSocketBase::Notify(), AcceptWith() 
 137     wxSocketBase
* Accept(bool wait 
= true); 
 140         Accept an incoming connection using the specified socket object. 
 143             Socket to be initialized 
 145             See Accept() for more info. 
 147         @return Returns @true on success, or @false if an error occurred or 
 148                 if the wait parameter was @false and there were no pending 
 151         @see WaitForAccept(), wxSocketBase::SetNotify(), 
 152              wxSocketBase::Notify(), Accept() 
 154     bool AcceptWith(wxSocketBase
& socket
, bool wait 
= true); 
 157         This function waits for an incoming connection. 
 159         Use it if you want to call Accept() or AcceptWith() with @e wait set 
 160         to @false, to detect when an incoming connection is waiting to be accepted. 
 163             Number of seconds to wait. If -1, it will wait for the default 
 164             timeout, as set with wxSocketBase::SetTimeout(). 
 166             Number of milliseconds to wait. 
 168         @return @true if an incoming connection arrived, @false if the timeout 
 171         @see Accept(), AcceptWith(), wxSocketBase::InterruptWait() 
 173     bool WaitForAccept(long seconds 
= -1, long millisecond 
= 0); 
 181     wxIPaddress is an abstract base class for all internet protocol address 
 182     objects. Currently, only wxIPV4address is implemented. An experimental 
 183     implementation for IPV6, wxIPV6address, is being developed. 
 188 class wxIPaddress 
: public wxSockAddress
 
 192         Internally, this is the same as setting the IP address to @b INADDR_ANY. 
 194         On IPV4 implementations, 0.0.0.0 
 196         On IPV6 implementations, :: 
 198         @return @true on success, @false if something went wrong. 
 200     virtual bool AnyAddress() = 0; 
 203         Internally, this is the same as setting the IP address to @b INADDR_BROADCAST. 
 205         On IPV4 implementations, 255.255.255.255 
 207         @return @true on success, @false if something went wrong. 
 209     virtual bool BroadcastAddress() = 0; 
 212         Set the address to hostname, which can be a host name or an IP-style address 
 213         in a format dependent on implementation. 
 215         @return @true on success, @false if something goes wrong (invalid 
 216                 hostname or invalid IP address). 
 218     virtual bool Hostname(const wxString
& hostname
) = 0; 
 221         Returns the hostname which matches the IP address. 
 223     virtual wxString 
Hostname() const = 0; 
 226         Returns a wxString containing the IP address. 
 228     virtual wxString 
IPAddress() const = 0; 
 231         Determines if current address is set to localhost. 
 233         @return @true if address is localhost, @false if internet address. 
 235     virtual bool IsLocalHost() const = 0; 
 238         Set address to localhost. 
 240         On IPV4 implementations, 127.0.0.1 
 242         On IPV6 implementations, ::1 
 244         @return @true on success, @false if something went wrong. 
 246     virtual bool LocalHost() = 0; 
 249         Set the port to that corresponding to the specified service. 
 251         @return @true on success, @false if something goes wrong (invalid @a service). 
 253     virtual bool Service(const wxString
& service
) = 0; 
 256         Set the port to that corresponding to the specified service. 
 258         @return @true on success, @false if something goes wrong (invalid @a service). 
 260     virtual bool Service(unsigned short service
) = 0; 
 263         Returns the current service. 
 265     virtual unsigned short Service() const = 0; 
 271     @class wxSocketClient 
 278 class wxSocketClient 
: public wxSocketBase
 
 285             Socket flags (See wxSocketBase::SetFlags()) 
 287     wxSocketClient(wxSocketFlags flags 
= wxSOCKET_NONE
); 
 290         Destructor. Please see wxSocketBase::Destroy(). 
 292     virtual ~wxSocketClient(); 
 295         Connects to a server using the specified address. 
 297         If @a wait is @true, Connect() will wait until the connection 
 300         @warning: This method will block the GUI. 
 302         If @a wait is @false, Connect() will try to establish the connection 
 303         and return immediately, without blocking the GUI. When used this way, 
 304         even if Connect() returns @false, the connection request can be 
 305         completed later. To detect this, use WaitOnConnect(), or catch 
 306         @b wxSOCKET_CONNECTION events (for successful establishment) and 
 307         @b wxSOCKET_LOST events (for connection failure). 
 310             Address of the server. 
 312             If @true, waits for the connection to complete. 
 314         @return @true if the connection is established and no error occurs. 
 315                 If @a wait was true, and Connect() returns @false, an error 
 316                 occurred and the connection failed. 
 317                 If @a wait was @false, and Connect() returns @false, you should 
 318                 still be prepared to handle the completion of this connection request, 
 319                 either with WaitOnConnect() or by watching wxSOCKET_CONNECTION 
 320                 and wxSOCKET_LOST events. 
 322         @see WaitOnConnect(), wxSocketBase::SetNotify(), wxSocketBase::Notify() 
 324     virtual bool Connect(const wxSockAddress
& address
, bool wait 
= true); 
 327         Connects to a server using the specified address. 
 329         If @a wait is @true, Connect() will wait until the connection 
 330         completes. @b Warning: This will block the GUI. 
 332         If @a wait is @false, Connect() will try to establish the connection 
 333         and return immediately, without blocking the GUI. When used this way, 
 334         even if Connect() returns @false, the connection request can be 
 335         completed later. To detect this, use WaitOnConnect(), or catch 
 336         @b wxSOCKET_CONNECTION events (for successful establishment) and 
 337         @b wxSOCKET_LOST events (for connection failure). 
 340             Address of the server. 
 342             Bind to the specified local address and port before connecting. 
 343             The local address and port can also be set using SetLocal(), 
 344             and then using the 2-parameter Connect() method. 
 346             If @true, waits for the connection to complete. 
 348         @return @true if the connection is established and no error occurs. 
 349                 If @a wait was true, and Connect() returns @false, an error 
 350                 occurred and the connection failed. 
 351                 If @a wait was @false, and Connect() returns @false, you should 
 352                 still be prepared to handle the completion of this connection request, 
 353                 either with WaitOnConnect() or by watching wxSOCKET_CONNECTION 
 354                 and wxSOCKET_LOST events. 
 356         @see WaitOnConnect(), wxSocketBase::SetNotify(), wxSocketBase::Notify() 
 358     bool Connect(const wxSockAddress
& address
, const wxSockAddress
& local
, 
 362         Wait until a connection request completes, or until the specified timeout 
 363         elapses. Use this function after issuing a call to Connect() with 
 364         @e wait set to @false. 
 367             Number of seconds to wait. 
 368             If -1, it will wait for the default timeout, as set with wxSocketBase::SetTimeout(). 
 370             Number of milliseconds to wait. 
 373             WaitOnConnect() returns @true if the connection request completes. 
 374             This does not necessarily mean that the connection was 
 375             successfully established; it might also happen that the 
 376             connection was refused by the peer. Use wxSocketBase::IsConnected() 
 377             to distinguish between these two situations. 
 378             @n @n If the timeout elapses, WaitOnConnect() returns @false. 
 379             @n @n These semantics allow code like this: 
 381             // Issue the connection request 
 382             client->Connect(addr, false); 
 384             // Wait until the request completes or until we decide to give up 
 385             bool waitmore = true; 
 386             while ( !client->WaitOnConnect(seconds, millis) && waitmore ) 
 388                 // possibly give some feedback to the user, 
 389                 // and update waitmore as needed. 
 391             bool success = client->IsConnected(); 
 394     bool WaitOnConnect(long seconds 
= -1, long milliseconds 
= 0); 
 402     You are unlikely to need to use this class: only wxSocketBase uses it. 
 407     @see wxSocketBase, wxIPaddress, wxIPV4address 
 409 class wxSockAddress 
: public wxObject
 
 420     virtual ~wxSockAddress(); 
 423         Delete all informations about the address. 
 425     virtual void Clear(); 
 428         Returns the length of the socket address. 
 438     This event class contains information about socket events. 
 440     @beginEventTable{wxSocketEvent} 
 441     @event{EVT_SOCKET(id, func)} 
 442            Process a socket event, supplying the member function. 
 448     @see wxSocketBase, wxSocketClient, wxSocketServer 
 450 class wxSocketEvent 
: public wxEvent
 
 456     wxSocketEvent(int id 
= 0); 
 459         Gets the client data of the socket which generated this event, as 
 460         set with wxSocketBase::SetClientData(). 
 462     void* GetClientData() const; 
 465         Returns the socket object to which this event refers to. 
 466         This makes it possible to use the same event handler for different sockets. 
 468     wxSocketBase
* GetSocket() const; 
 471         Returns the socket event type. 
 473     wxSocketNotify 
GetSocketEvent() const; 
 478     wxSocket error return values. 
 482     wxSOCKET_NOERROR
,       ///< No error happened. 
 483     wxSOCKET_INVOP
,         ///< Invalid operation. 
 484     wxSOCKET_IOERR
,         ///< Input/Output error. 
 485     wxSOCKET_INVADDR
,       ///< Invalid address passed to wxSocket. 
 486     wxSOCKET_INVSOCK
,       ///< Invalid socket (uninitialized). 
 487     wxSOCKET_NOHOST
,        ///< No corresponding host. 
 488     wxSOCKET_INVPORT
,       ///< Invalid port. 
 489     wxSOCKET_WOULDBLOCK
,    ///< The socket is non-blocking and the operation would block. 
 490     wxSOCKET_TIMEDOUT
,      ///< The timeout for this operation expired. 
 491     wxSOCKET_MEMERR         
///< Memory exhausted. 
 496     @anchor wxSocketEventFlags 
 498     wxSocket Event Flags. 
 500     A brief note on how to use these events: 
 502     The @b wxSOCKET_INPUT event will be issued whenever there is data available 
 503     for reading. This will be the case if the input queue was empty and new data 
 504     arrives, or if the application has read some data yet there is still more data 
 505     available. This means that the application does not need to read all available 
 506     data in response to a @b wxSOCKET_INPUT event, as more events will be produced 
 509     The @b wxSOCKET_OUTPUT event is issued when a socket is first connected with 
 510     Connect() or accepted with Accept(). After that, new events will be generated 
 511     only after an output operation fails with @b wxSOCKET_WOULDBLOCK and buffer space 
 512     becomes available again. This means that the application should assume that it can 
 513     write data to the socket until an @b wxSOCKET_WOULDBLOCK error occurs; after this, 
 514     whenever the socket becomes writable again the application will be notified with 
 515     another @b wxSOCKET_OUTPUT event. 
 517     The @b wxSOCKET_CONNECTION event is issued when a delayed connection request completes 
 518     successfully (client) or when a new connection arrives at the incoming queue (server). 
 520     The @b wxSOCKET_LOST event is issued when a close indication is received for the socket. 
 521     This means that the connection broke down or that it was closed by the peer. Also, this 
 522     event will be issued if a connection request fails. 
 524 enum wxSocketEventFlags
 
 526     wxSOCKET_INPUT
,         ///< There is data available for reading. 
 527     wxSOCKET_OUTPUT
,        ///< The socket is ready to be written to. 
 528     wxSOCKET_CONNECTION
,    ///< Incoming connection request (server), or 
 529                             ///< successful connection establishment (client). 
 530     wxSOCKET_LOST           
///< The connection has been closed. 
 535     @anchor wxSocketFlags 
 539     A brief overview on how to use these flags follows. 
 541     If no flag is specified (this is the same as @b wxSOCKET_NONE), 
 542     IO calls will return after some data has been read or written, even 
 543     when the transfer might not be complete. This is the same as issuing 
 544     exactly one blocking low-level call to @b recv() or @b send(). Note 
 545     that @e blocking here refers to when the function returns, not 
 546     to whether the GUI blocks during this time. 
 548     If @b wxSOCKET_NOWAIT is specified, IO calls will return immediately. 
 549     Read operations will retrieve only available data. Write operations will 
 550     write as much data as possible, depending on how much space is available 
 551     in the output buffer. This is the same as issuing exactly one nonblocking 
 552     low-level call to @b recv() or @b send(). Note that @e nonblocking here 
 553     refers to when the function returns, not to whether the GUI blocks during 
 556     If @b wxSOCKET_WAITALL is specified, IO calls won't return until ALL 
 557     the data has been read or written (or until an error occurs), blocking if 
 558     necessary, and issuing several low level calls if necessary. This is the 
 559     same as having a loop which makes as many blocking low-level calls to 
 560     @b recv() or @b send() as needed so as to transfer all the data. Note 
 561     that @e blocking here refers to when the function returns, not 
 562     to whether the GUI blocks during this time. 
 564     The @b wxSOCKET_BLOCK flag controls whether the GUI blocks during 
 565     IO operations. If this flag is specified, the socket will not yield 
 566     during IO calls, so the GUI will remain blocked until the operation 
 567     completes. If it is not used, then the application must take extra 
 568     care to avoid unwanted reentrance. 
 570     The @b wxSOCKET_REUSEADDR flag controls the use of the @b SO_REUSEADDR standard 
 571     @b setsockopt() flag. This flag allows the socket to bind to a port that is 
 572     already in use. This is mostly used on UNIX-based systems to allow rapid starting 
 573     and stopping of a server, otherwise you may have to wait several minutes for the 
 574     port to become available. 
 576     @b wxSOCKET_REUSEADDR can also be used with socket clients to (re)bind to a 
 577     particular local port for an outgoing connection. 
 578     This option can have surprising platform dependent behavior, so check the 
 579     documentation for your platform's implementation of setsockopt(). 
 581     Note that on BSD-based systems(e.g. Mac OS X), use of 
 582     @b wxSOCKET_REUSEADDR implies @b SO_REUSEPORT in addition to 
 583     @b SO_REUSEADDR to be consistent with Windows. 
 585     The @b wxSOCKET_BROADCAST flag controls the use of the @b SO_BROADCAST standard 
 586     @b setsockopt() flag. This flag allows the socket to use the broadcast address, 
 587     and is generally used in conjunction with @b wxSOCKET_NOBIND and 
 588     wxIPaddress::BroadcastAddress(). 
 591     - @b wxSOCKET_NONE will try to read at least SOME data, no matter how much. 
 592     - @b wxSOCKET_NOWAIT will always return immediately, even if it cannot 
 593       read or write ANY data. 
 594     - @b wxSOCKET_WAITALL will only return when it has read or written ALL 
 596     - @b wxSOCKET_BLOCK has nothing to do with the previous flags and 
 597       it controls whether the GUI blocks. 
 598     - @b wxSOCKET_REUSEADDR controls special platform-specific behavior for 
 599       reusing local addresses/ports. 
 603     wxSOCKET_NONE 
= 0,      ///< Normal functionality. 
 604     wxSOCKET_NOWAIT 
= 1,    ///< Read/write as much data as possible and return immediately. 
 605     wxSOCKET_WAITALL 
= 2,   ///< Wait for all required data to be read/written unless an error occurs. 
 606     wxSOCKET_BLOCK 
= 4,     ///< Block the GUI (do not yield) while reading/writing data. 
 607     wxSOCKET_REUSEADDR 
= 8, ///< Allows the use of an in-use port (wxServerSocket only) 
 608     wxSOCKET_BROADCAST 
= 16, ///< Switches the socket to broadcast mode 
 609     wxSOCKET_NOBIND 
= 32    ///< Stops the socket from being bound to a specific 
 610                             ///< adapter (normally used in conjunction with 
 611                             ///< @b wxSOCKET_BROADCAST) 
 618     wxSocketBase is the base class for all socket-related objects, and it 
 619     defines all basic IO functionality. 
 622     (Workaround for implementation limitation for wxWidgets up to 2.5.x) 
 623     If you want to use sockets or derived classes such as wxFTP in a secondary 
 624     thread, call @b wxSocketBase::Initialize() (undocumented) from the main 
 625     thread before creating any sockets - in wxApp::OnInit() for example. 
 626     See http://wiki.wxwidgets.org/wiki.pl?WxSocket or 
 627     http://www.litwindow.com/knowhow/knowhow.html for more details. 
 629     @beginEventTable{wxSocketEvent} 
 630     @event{EVT_SOCKET(id, func)} 
 631         Process a @c wxEVT_SOCKET event. 
 632         See @ref wxSocketEventFlags and @ref wxSocketFlags for more info. 
 638     @see wxSocketEvent, wxSocketClient, wxSocketServer, @sample{sockets}, 
 639          @ref wxSocketFlags, ::wxSocketEventFlags, ::wxSocketError 
 641 class wxSocketBase 
: public wxObject
 
 646         @name Construction and Destruction 
 653         Don't use it directly; instead, use wxSocketClient to construct a socket client, 
 654         or wxSocketServer to construct a socket server. 
 661         Do not destroy a socket using the delete operator directly; 
 662         use Destroy() instead. Also, do not create socket objects in the stack. 
 667         Destroys the socket safely. 
 669         Use this function instead of the delete operator, since otherwise socket events 
 670         could reach the application even after the socket has been destroyed. To prevent 
 671         this problem, this function appends the wxSocket to a list of object to be deleted 
 672         on idle time, after all events have been processed. For the same reason, you should 
 673         avoid creating socket objects in the stack. 
 675         Destroy() calls Close() automatically. 
 677         @return Always @true. 
 690         Returns @true if an error occurred in the last IO operation. 
 692         Use this function to check for an error condition after one of the 
 693         following calls: Discard(), Peek(), Read(), ReadMsg(), Unread(), Write(), WriteMsg(). 
 698         This function returns the local address field of the socket. The local 
 699         address field contains the complete local address of the socket (local 
 700         address, local port, ...). 
 702         @return @true if no error happened, @false otherwise. 
 704     bool GetLocal(wxSockAddress
& addr
) const; 
 707         This function returns the peer address field of the socket. The peer 
 708         address field contains the complete peer host address of the socket 
 709         (address, port, ...). 
 711         @return @true if no error happened, @false otherwise. 
 713     bool GetPeer(wxSockAddress
& addr
) const; 
 716         Return the socket timeout in seconds. 
 718         The timeout can be set using SetTimeout() and is 10 minutes by default. 
 720     long GetTimeout() const; 
 723         Returns @true if the socket is connected. 
 725     bool IsConnected() const; 
 728         This function waits until the socket is readable. 
 730         This might mean that queued data is available for reading or, for streamed 
 731         sockets, that the connection has been closed, so that a read operation will 
 732         complete immediately without blocking (unless the @b wxSOCKET_WAITALL flag 
 733         is set, in which case the operation might still block). 
 738         Returns @true if the socket is not connected. 
 740     bool IsDisconnected() const; 
 743         Returns @true if the socket is initialized and ready and @false in other 
 747         For wxSocketClient, IsOk() won't return @true unless the client is connected to a server. 
 748         For wxSocketServer, IsOk() will return @true if the server could bind to the specified address 
 749         and is already listening for new connections. 
 750         IsOk() does not check for IO errors; use Error() instead for that purpose. 
 755         Returns the number of bytes read or written by the last IO call. 
 757         Use this function to get the number of bytes actually transferred 
 758         after using one of the following IO calls: Discard(), Peek(), Read(), 
 759         ReadMsg(), Unread(), Write(), WriteMsg(). 
 761     wxUint32 
LastCount() const; 
 764         Returns the last wxSocket error. See @ref wxSocketError . 
 767         This function merely returns the last error code, 
 768         but it should not be used to determine if an error has occurred (this 
 769         is because successful operations do not change the LastError value). 
 770         Use Error() first, in order to determine if the last IO call failed. 
 771         If this returns @true, use LastError() to discover the cause of the error. 
 773     wxSocketError 
LastError() const; 
 776         This function restores the previous state of the socket, as saved 
 779         Calls to SaveState() and RestoreState() can be nested. 
 786         This function saves the current state of the socket in a stack. 
 787         Socket state includes flags, as set with SetFlags(), event mask, as set 
 788         with SetNotify() and Notify(), user data, as set with SetClientData(). 
 789         Calls to SaveState and RestoreState can be nested. 
 801         See also: wxSocketServer::WaitForAccept(), wxSocketClient::WaitOnConnect() 
 806         This function shuts down the socket, disabling further transmission and 
 807         reception of data; it also disables events for the socket and frees the 
 808         associated system resources. 
 810         Upon socket destruction, Close() is automatically called, so in most cases 
 811         you won't need to do it yourself, unless you explicitly want to shut down 
 812         the socket, typically to notify the peer that you are closing the connection. 
 815         Although Close() immediately disables events for the socket, it is possible 
 816         that event messages may be waiting in the application's event queue. 
 817         The application must therefore be prepared to handle socket event messages even 
 818         after calling Close(). 
 823         This function simply deletes all bytes in the incoming queue. This function 
 824         always returns immediately and its operation is not affected by IO flags. 
 826         Use LastCount() to verify the number of bytes actually discarded. 
 828         If you use Error(), it will always return @false. 
 830     wxSocketBase 
Discard(); 
 833         Returns current IO flags, as set with SetFlags() 
 835     wxSocketFlags 
GetFlags() const; 
 838         Use this function to interrupt any wait operation currently in progress. 
 840         Note that this is not intended as a regular way to interrupt a Wait call, 
 841         but only as an escape mechanism for exceptional situations where it is 
 842         absolutely necessary to use it, for example to abort an operation due to 
 843         some exception or abnormal problem. InterruptWait is automatically called 
 844         when you Close() a socket (and thus also upon 
 845         socket destruction), so you don't need to use it in these cases. 
 847         @see  Wait(), WaitForLost(), WaitForRead(), WaitForWrite(), 
 848               wxSocketServer::WaitForAccept(), wxSocketClient::WaitOnConnect() 
 850     void InterruptWait(); 
 853         This function peeks a buffer of @a nbytes bytes from the socket. 
 855         Peeking a buffer doesn't delete it from the socket input queue. 
 857         Use LastCount() to verify the number of bytes actually peeked. 
 859         Use Error() to determine if the operation succeeded. 
 862             Buffer where to put peeked data. 
 866         @return Returns a reference to the current object. 
 869             The exact behaviour of Peek() depends on the combination of flags being used. 
 870             For a detailed explanation, see SetFlags() 
 872         @see Error(), LastError(), LastCount(), SetFlags() 
 874     wxSocketBase 
Peek(void* buffer
, wxUint32 nbytes
); 
 877         This function reads a buffer of @a nbytes bytes from the socket. 
 878         Use LastCount() to verify the number of bytes actually read. 
 879         Use Error() to determine if the operation succeeded. 
 882             Buffer where to put read data. 
 886         @return Returns a reference to the current object. 
 889             The exact behaviour of Read() depends on the combination of flags being used. 
 890             For a detailed explanation, see SetFlags() 
 892         @see Error(), LastError(), LastCount(), 
 895     wxSocketBase 
Read(void* buffer
, wxUint32 nbytes
); 
 898         This function reads a buffer sent by WriteMsg() 
 899         on a socket. If the buffer passed to the function isn't big enough, the 
 900         remaining bytes will be discarded. This function always waits for the 
 901         buffer to be entirely filled, unless an error occurs. 
 903         Use LastCount() to verify the number of bytes actually read. 
 905         Use Error() to determine if the operation succeeded. 
 908             Buffer where to put read data. 
 912         @return Returns a reference to the current object. 
 915             ReadMsg() will behave as if the @b wxSOCKET_WAITALL flag was always set 
 916             and it will always ignore the @b wxSOCKET_NOWAIT flag. 
 917             The exact behaviour of ReadMsg() depends on the @b wxSOCKET_BLOCK flag. 
 918             For a detailed explanation, see SetFlags(). 
 920         @see Error(), LastError(), LastCount(), SetFlags(), WriteMsg() 
 922     wxSocketBase 
ReadMsg(void* buffer
, wxUint32 nbytes
); 
 925         Use SetFlags to customize IO operation for this socket. 
 926         The @a flags parameter may be a combination of flags ORed together. 
 927         The following flags can be used: 
 931             Normal functionality. 
 932         @flag{wxSOCKET_NOWAIT} 
 933             Read/write as much data as possible and return immediately. 
 934         @flag{wxSOCKET_WAITALL} 
 935             Wait for all required data to be read/written unless an error occurs. 
 936         @flag{wxSOCKET_BLOCK} 
 937             Block the GUI (do not yield) while reading/writing data. 
 938         @flag{wxSOCKET_REUSEADDR} 
 939             Allows the use of an in-use port (wxServerSocket only). 
 940         @flag{wxSOCKET_BROADCAST} 
 941             Switches the socket to broadcast mode. 
 942         @flag{wxSOCKET_NOBIND} 
 943             Stops the socket from being bound to a specific adapter (normally 
 944             used in conjunction with @b wxSOCKET_BROADCAST). 
 947         For more information on socket events see @ref wxSocketFlags . 
 949     void SetFlags(wxSocketFlags flags
); 
 952         This function allows you to set the local address and port, 
 953         useful when an application needs to reuse a particular port. When 
 954         a local port is set for a wxSocketClient, 
 955         @b bind() will be called before @b connect(). 
 957     bool SetLocal(const wxIPV4address
& local
); 
 960         This function sets the default socket timeout in seconds. This timeout 
 961         applies to all IO calls, and also to the Wait() family 
 962         of functions if you don't specify a wait interval. Initially, the default 
 963         timeout is 10 minutes. 
 965     void SetTimeout(int seconds
); 
 968         This function unreads a buffer. That is, the data in the buffer is put back 
 969         in the incoming queue. This function is not affected by wxSocket flags. 
 971         If you use LastCount(), it will always return @a nbytes. 
 973         If you use Error(), it will always return @false. 
 980         @return Returns a reference to the current object. 
 982         @see Error(), LastCount(), LastError() 
 984     wxSocketBase 
Unread(const void* buffer
, wxUint32 nbytes
); 
 987         This function waits until any of the following conditions is @true: 
 989         @li The socket becomes readable. 
 990         @li The socket becomes writable. 
 991         @li An ongoing connection request has completed (wxSocketClient only) 
 992         @li An incoming connection request has arrived (wxSocketServer only) 
 993         @li The connection has been closed. 
 995         Note that it is recommended to use the individual Wait functions 
 996         to wait for the required condition, instead of this one. 
 999             Number of seconds to wait. 
1000             If -1, it will wait for the default timeout, 
1001             as set with SetTimeout(). 
1003             Number of milliseconds to wait. 
1005         @return Returns @true when any of the above conditions is satisfied, 
1006                 @false if the timeout was reached. 
1008         @see InterruptWait(), wxSocketServer::WaitForAccept(), 
1009              WaitForLost(), WaitForRead(), 
1010              WaitForWrite(), wxSocketClient::WaitOnConnect() 
1012     bool Wait(long seconds 
= -1, long millisecond 
= 0); 
1015         This function waits until the connection is lost. This may happen if 
1016         the peer gracefully closes the connection or if the connection breaks. 
1019             Number of seconds to wait. 
1020             If -1, it will wait for the default timeout, 
1021             as set with SetTimeout(). 
1023             Number of milliseconds to wait. 
1025         @return Returns @true if the connection was lost, @false if the timeout 
1028         @see InterruptWait(), Wait() 
1030     bool WaitForLost(long seconds 
= -1, long millisecond 
= 0); 
1033         This function waits until the socket is readable. 
1035         This might mean that queued data is available for reading or, for streamed 
1036         sockets, that the connection has been closed, so that a read operation will 
1037         complete immediately without blocking (unless the @b wxSOCKET_WAITALL flag 
1038         is set, in which case the operation might still block). 
1041             Number of seconds to wait. 
1042             If -1, it will wait for the default timeout, 
1043             as set with SetTimeout(). 
1045             Number of milliseconds to wait. 
1047         @return Returns @true if the socket becomes readable, @false on timeout. 
1049         @see InterruptWait(), Wait() 
1051     bool WaitForRead(long seconds 
= -1, long millisecond 
= 0); 
1054         This function waits until the socket becomes writable. 
1056         This might mean that the socket is ready to send new data, or for streamed 
1057         sockets, that the connection has been closed, so that a write operation is 
1058         guaranteed to complete immediately (unless the @b wxSOCKET_WAITALL flag is set, 
1059         in which case the operation might still block). 
1062             Number of seconds to wait. 
1063             If -1, it will wait for the default timeout, 
1064             as set with SetTimeout(). 
1066             Number of milliseconds to wait. 
1068         @return Returns @true if the socket becomes writable, @false on timeout. 
1070         @see InterruptWait(), Wait() 
1072     bool WaitForWrite(long seconds 
= -1, long millisecond 
= 0); 
1075         This function writes a buffer of @a nbytes bytes to the socket. 
1077         Use LastCount() to verify the number of bytes actually written. 
1079         Use Error() to determine if the operation succeeded. 
1082             Buffer with the data to be sent. 
1086         @return Returns a reference to the current object. 
1090         The exact behaviour of Write() depends on the combination of flags being used. 
1091         For a detailed explanation, see SetFlags(). 
1093         @see Error(), LastError(), LastCount(), SetFlags() 
1095     wxSocketBase 
Write(const void* buffer
, wxUint32 nbytes
); 
1098         This function writes a buffer of @a nbytes bytes from the socket, but it 
1099         writes a short header before so that ReadMsg() knows how much data should 
1100         it actually read. So, a buffer sent with WriteMsg() MUST be read with ReadMsg(). 
1102         This function always waits for the entire buffer to be sent, unless an error occurs. 
1104         Use LastCount() to verify the number of bytes actually written. 
1106         Use Error() to determine if the operation succeeded. 
1109             Buffer with the data to be sent. 
1111             Number of bytes to send. 
1113         @return Returns a reference to the current object. 
1117         WriteMsg() will behave as if the @b wxSOCKET_WAITALL flag was always set and 
1118         it will always ignore the @b wxSOCKET_NOWAIT flag. The exact behaviour of 
1119         WriteMsg() depends on the @b wxSOCKET_BLOCK flag. For a detailed explanation, 
1122         @see  Error(), LastError(), LastCount(), SetFlags(), ReadMsg() 
1125     wxSocketBase 
WriteMsg(const void* buffer
, wxUint32 nbytes
); 
1131         @name Handling Socket Events 
1136         Returns a pointer of the client data for this socket, as set with 
1139     void* GetClientData() const; 
1142         According to the @a notify value, this function enables 
1143         or disables socket events. If @a notify is @true, the events 
1144         configured with SetNotify() will 
1145         be sent to the application. If @a notify is @false; no events 
1148     void Notify(bool notify
); 
1151         Sets user-supplied client data for this socket. All socket events will 
1152         contain a pointer to this data, which can be retrieved with 
1153         the wxSocketEvent::GetClientData() function. 
1155     void SetClientData(void* data
); 
1158         Sets an event handler to be called when a socket event occurs. The 
1159         handler will be called for those events for which notification is 
1160         enabled with SetNotify() and 
1164             Specifies the event handler you want to use. 
1166             The id of socket event. 
1168         @see SetNotify(), Notify(), wxSocketEvent, wxEvtHandler 
1170     void SetEventHandler(wxEvtHandler
& handler
, int id 
= -1); 
1173         Specifies which socket events are to be sent to the event handler. 
1174         The @a flags parameter may be combination of flags ORed together. The 
1175         following flags can be used: 
1178         @flag{wxSOCKET_INPUT_FLAG} to receive @b wxSOCKET_INPUT. 
1179         @flag{wxSOCKET_OUTPUT_FLAG} to receive @b wxSOCKET_OUTPUT. 
1180         @flag{wxSOCKET_CONNECTION_FLAG} to receive @b wxSOCKET_CONNECTION. 
1181         @flag{wxSOCKET_LOST_FLAG} to receive @b wxSOCKET_LOST. 
1187         sock.SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG); 
1191         In this example, the user will be notified about incoming socket data and 
1192         whenever the connection is closed. 
1194         For more information on socket events see @ref wxSocketEventFlags . 
1196     void SetNotify(wxSocketEventFlags flags
); 
1204     @class wxDatagramSocket 
1211 class wxDatagramSocket 
: public wxSocketBase
 
1220             Socket flags (See wxSocketBase::SetFlags()). 
1222     wxDatagramSocket(const wxSockAddress
& addr
, 
1223                      wxSocketFlags flags 
= wxSOCKET_NONE
); 
1226         Destructor. Please see wxSocketBase::Destroy(). 
1228     virtual ~wxDatagramSocket(); 
1231         This function writes a buffer of @a nbytes bytes to the socket. 
1232         Use wxSocketBase::LastCount() to verify the number of bytes actually wrote. 
1233         Use wxSocketBase::Error() to determine if the operation succeeded. 
1236             The address of the destination peer for this data. 
1238             Buffer where read data is. 
1242         @return Returns a reference to the current object. 
1244         @see wxSocketBase::LastError(), wxSocketBase::SetFlags() 
1246     wxDatagramSocket
& SendTo(const wxSockAddress
& address
, 
1247                              const void* buffer
, wxUint32 nbytes
);