]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/socket.h
implement wxBitmap ctor from XBM data
[wxWidgets.git] / interface / wx / socket.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: socket.h
e54c96f1 3// Purpose: interface of wxIPV4address
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxIPV4address
7c913512
FM
11
12
23324ae1
FM
13 @library{wxbase}
14 @category{net}
15*/
16class wxIPV4address : public wxIPaddress
17{
18public:
19 /**
20 Set address to any of the addresses of the current machine. Whenever
21 possible, use this function instead of LocalHost(),
22 as this correctly handles multi-homed hosts and avoids other small
23 problems. Internally, this is the same as setting the IP address
24 to @b INADDR_ANY.
3c4f71cc 25
d29a9a8a 26 @return Returns @true on success, @false if something went wrong.
23324ae1
FM
27 */
28 bool AnyAddress();
29
30 //@{
31 /**
32 Returns the hostname which matches the IP address.
33 */
34 bool Hostname(const wxString& hostname);
7c913512 35 Return value wxString Hostname();
23324ae1
FM
36 //@}
37
38 /**
39 Returns a wxString containing the IP address in dot quad (127.0.0.1) format.
40 */
41 wxString IPAddress();
42
43 /**
7c913512 44 Set address to localhost (127.0.0.1). Whenever possible, use the
23324ae1
FM
45 AnyAddress(),
46 function instead of this one, as this will correctly handle multi-homed
47 hosts and avoid other small problems.
48 */
49 bool LocalHost();
50
51 //@{
52 /**
53 Returns the current service.
54 */
55 bool Service(const wxString& service);
7c913512
FM
56 Return value bool Service(unsigned short service);
57 Return value unsigned short Service();
23324ae1
FM
58 //@}
59};
60
61
e54c96f1 62
23324ae1
FM
63/**
64 @class wxSocketServer
7c913512
FM
65
66
23324ae1
FM
67 @library{wxnet}
68 @category{net}
7c913512 69
e54c96f1
FM
70 @see wxSocketServer::WaitForAccept, wxSocketBase::SetNotify,
71 wxSocketBase::Notify, wxSocketServer::AcceptWith
23324ae1
FM
72*/
73class wxSocketServer : public wxSocketBase
74{
75public:
76 /**
77 Constructs a new server and tries to bind to the specified @e address.
7c913512 78 Before trying to accept new connections, test whether it succeeded with
23324ae1 79 @ref wxSocketBase::isok wxSocketBase:IsOk.
3c4f71cc 80
7c913512 81 @param address
4cc4bfaf 82 Specifies the local address for the server (e.g. port number).
7c913512 83 @param flags
4cc4bfaf 84 Socket flags (See wxSocketBase::SetFlags)
23324ae1
FM
85 */
86 wxSocketServer(const wxSockAddress& address,
87 wxSocketFlags flags = wxSOCKET_NONE);
88
89 /**
90 Destructor (it doesn't close the accepted connections).
91 */
92 ~wxSocketServer();
93
94 /**
7c913512 95 Accepts an incoming connection request, and creates a new
23324ae1
FM
96 wxSocketBase object which represents
97 the server-side of the connection.
4cc4bfaf 98 If @a wait is @true and there are no pending connections to be
23324ae1
FM
99 accepted, it will wait for the next incoming connection to
100 arrive. @b Warning: This will block the GUI.
4cc4bfaf 101 If @a wait is @false, it will try to accept a pending connection
23324ae1
FM
102 if there is one, but it will always return immediately without blocking
103 the GUI. If you want to use Accept in this way, you can either check for
7c913512 104 incoming connections with WaitForAccept()
23324ae1
FM
105 or catch @b wxSOCKET_CONNECTION events, then call Accept once you know
106 that there is an incoming connection waiting to be accepted.
3c4f71cc 107
d29a9a8a 108 @return Returns an opened socket connection, or @NULL if an error
4cc4bfaf
FM
109 occurred or if the wait parameter was @false and there
110 were no pending connections.
3c4f71cc 111
4cc4bfaf
FM
112 @see WaitForAccept(), wxSocketBase::SetNotify,
113 wxSocketBase::Notify, AcceptWith()
23324ae1 114 */
4cc4bfaf 115 wxSocketBase* Accept(bool wait = true);
23324ae1
FM
116
117 /**
118 Accept an incoming connection using the specified socket object.
3c4f71cc 119
7c913512 120 @param socket
4cc4bfaf 121 Socket to be initialized
3c4f71cc 122
d29a9a8a 123 @return Returns @true on success, or @false if an error occurred or if the
4cc4bfaf
FM
124 wait parameter was @false and there were no pending
125 connections.
23324ae1 126 */
4cc4bfaf 127 bool AcceptWith(wxSocketBase& socket, bool wait = true);
23324ae1
FM
128
129 /**
7c913512
FM
130 This function waits for an incoming connection. Use it if you want to call
131 Accept() or AcceptWith()
23324ae1
FM
132 with @e wait set to @false, to detect when an incoming connection is waiting
133 to be accepted.
3c4f71cc 134
7c913512 135 @param seconds
4cc4bfaf
FM
136 Number of seconds to wait.
137 If -1, it will wait for the default timeout,
138 as set with SetTimeout.
7c913512 139 @param millisecond
4cc4bfaf 140 Number of milliseconds to wait.
3c4f71cc 141
d29a9a8a 142 @return Returns @true if an incoming connection arrived, @false if the
4cc4bfaf 143 timeout elapsed.
23324ae1
FM
144 */
145 bool WaitForAccept(long seconds = -1, long millisecond = 0);
146};
147
148
e54c96f1 149
23324ae1
FM
150/**
151 @class wxIPaddress
7c913512
FM
152
153 wxIPaddress is an abstract base class for all internet protocol address
154 objects. Currently, only wxIPV4address
23324ae1
FM
155 is implemented. An experimental implementation for IPV6, wxIPV6address,
156 is being developed.
7c913512 157
23324ae1
FM
158 @library{wxbase}
159 @category{net}
160*/
161class wxIPaddress : public wxSockAddress
162{
163public:
164 /**
165 Internally, this is the same as setting the IP address
166 to @b INADDR_ANY.
23324ae1 167 On IPV4 implementations, 0.0.0.0
23324ae1 168 On IPV6 implementations, ::
3c4f71cc 169
d29a9a8a 170 @return Returns @true on success, @false if something went wrong.
23324ae1
FM
171 */
172 virtual bool AnyAddress();
173
174 /**
175 Internally, this is the same as setting the IP address
176 to @b INADDR_BROADCAST.
23324ae1 177 On IPV4 implementations, 255.255.255.255
3c4f71cc 178
d29a9a8a 179 @return Returns @true on success, @false if something went wrong.
23324ae1
FM
180 */
181 virtual bool BroadcastAddress();
182
183 //@{
184 /**
185 Returns the hostname which matches the IP address.
186 */
187 virtual bool Hostname(const wxString& hostname);
7c913512 188 Return value virtual wxString Hostname();
23324ae1
FM
189 //@}
190
191 /**
192 Returns a wxString containing the IP address.
193 */
194 virtual wxString IPAddress();
195
196 /**
197 Determines if current address is set to localhost.
198 */
199 virtual bool IsLocalHost();
200
201 /**
7c913512 202 Set address to localhost.
23324ae1 203 On IPV4 implementations, 127.0.0.1
23324ae1 204 On IPV6 implementations, ::1
3c4f71cc 205
d29a9a8a 206 @return Returns @true on success, @false if something went wrong.
23324ae1
FM
207 */
208 virtual bool LocalHost();
209
210 //@{
211 /**
212 Returns the current service.
213 */
214 virtual bool Service(const wxString& service);
7c913512
FM
215 Return value virtual bool Service(unsigned short service);
216 Return value virtual unsigned short Service();
23324ae1
FM
217 //@}
218};
219
220
e54c96f1 221
23324ae1
FM
222/**
223 @class wxSocketClient
7c913512
FM
224
225
23324ae1
FM
226 @library{wxnet}
227 @category{net}
7c913512 228
e54c96f1
FM
229 @see wxSocketClient::WaitOnConnect, wxSocketBase::SetNotify,
230 wxSocketBase::Notify
23324ae1
FM
231*/
232class wxSocketClient : public wxSocketBase
233{
234public:
235 /**
236 Constructor.
3c4f71cc 237
7c913512 238 @param flags
4cc4bfaf 239 Socket flags (See wxSocketBase::SetFlags)
23324ae1
FM
240 */
241 wxSocketClient(wxSocketFlags flags = wxSOCKET_NONE);
242
243 /**
244 Destructor. Please see wxSocketBase::Destroy.
245 */
246 ~wxSocketClient();
247
248 //@{
249 /**
250 Connects to a server using the specified address.
4cc4bfaf 251 If @a wait is @true, Connect will wait until the connection
23324ae1 252 completes. @b Warning: This will block the GUI.
4cc4bfaf 253 If @a wait is @false, Connect will try to establish the connection and
23324ae1
FM
254 return immediately, without blocking the GUI. When used this way, even if
255 Connect returns @false, the connection request can be completed later.
256 To detect this, use WaitOnConnect(),
257 or catch @b wxSOCKET_CONNECTION events (for successful establishment)
258 and @b wxSOCKET_LOST events (for connection failure).
3c4f71cc 259
7c913512 260 @param address
4cc4bfaf 261 Address of the server.
7c913512 262 @param local
4cc4bfaf
FM
263 Bind to the specified local address and port before connecting.
264 The local address and port can also be set using SetLocal,
265 and then using the 2-parameter Connect method.
7c913512 266 @param wait
4cc4bfaf 267 If @true, waits for the connection to complete.
3c4f71cc 268
d29a9a8a 269 @return Returns @true if the connection is established and no error
4cc4bfaf 270 occurs.
3c4f71cc 271
4cc4bfaf
FM
272 @see WaitOnConnect(), wxSocketBase::SetNotify,
273 wxSocketBase::Notify
23324ae1 274 */
72ac4e88
VZ
275 bool Connect(const wxSockAddress& address, bool wait = true);
276 bool Connect(const wxSockAddress& address, const wxSockAddress& local,
4cc4bfaf 277 bool wait = true);
23324ae1
FM
278 //@}
279
280 /**
281 Wait until a connection request completes, or until the specified timeout
282 elapses. Use this function after issuing a call
283 to Connect() with @e wait set to @false.
3c4f71cc 284
7c913512 285 @param seconds
4cc4bfaf
FM
286 Number of seconds to wait.
287 If -1, it will wait for the default timeout,
288 as set with SetTimeout.
7c913512 289 @param millisecond
4cc4bfaf 290 Number of milliseconds to wait.
3c4f71cc 291
d29a9a8a 292 @return WaitOnConnect returns @true if the connection request completes.
4cc4bfaf
FM
293 This does not necessarily mean that the connection was
294 successfully established; it might also happen that the
295 connection was refused by the peer. Use IsConnected to
296 distinguish between these two situations.
23324ae1
FM
297 */
298 bool WaitOnConnect(long seconds = -1, long milliseconds = 0);
299};
300
301
e54c96f1 302
23324ae1
FM
303/**
304 @class wxSockAddress
7c913512 305
23324ae1 306 You are unlikely to need to use this class: only wxSocketBase uses it.
7c913512 307
23324ae1
FM
308 @library{wxbase}
309 @category{FIXME}
7c913512 310
e54c96f1 311 @see wxSocketBase, wxIPaddress, wxIPV4address
23324ae1
FM
312*/
313class wxSockAddress : public wxObject
314{
315public:
316 /**
317 Default constructor.
318 */
319 wxSockAddress();
320
321 /**
322 Default destructor.
323 */
324 ~wxSockAddress();
325
326 /**
327 Delete all informations about the address.
328 */
329 void Clear();
330
331 /**
332 Returns the length of the socket address.
333 */
334 int SockAddrLen();
335};
336
337
e54c96f1 338
23324ae1
FM
339/**
340 @class wxSocketEvent
7c913512 341
23324ae1 342 This event class contains information about socket events.
7c913512 343
23324ae1
FM
344 @library{wxnet}
345 @category{net}
7c913512 346
e54c96f1 347 @see wxSocketBase, wxSocketClient, wxSocketServer
23324ae1
FM
348*/
349class wxSocketEvent : public wxEvent
350{
351public:
352 /**
353 Constructor.
354 */
355 wxSocketEvent(int id = 0);
356
357 /**
358 Gets the client data of the socket which generated this event, as
359 set with wxSocketBase::SetClientData.
360 */
4cc4bfaf 361 void* GetClientData();
23324ae1
FM
362
363 /**
364 Returns the socket object to which this event refers to. This makes
365 it possible to use the same event handler for different sockets.
366 */
328f5751 367 wxSocketBase* GetSocket() const;
23324ae1
FM
368
369 /**
370 Returns the socket event type.
371 */
328f5751 372 wxSocketNotify GetSocketEvent() const;
23324ae1
FM
373};
374
375
e54c96f1 376
23324ae1
FM
377/**
378 @class wxSocketBase
7c913512 379
23324ae1
FM
380 wxSocketBase is the base class for all socket-related objects, and it
381 defines all basic IO functionality.
7c913512 382
23324ae1
FM
383 Note: (Workaround for implementation limitation for wxWidgets up to 2.5.x)
384 If you want to use sockets or derived classes such as wxFTP in a secondary
385 thread,
386 call wxSocketBase::Initialize() (undocumented) from the main thread before
7c913512
FM
387 creating
388 any sockets - in wxApp::OnInit for example.
23324ae1
FM
389 See http://wiki.wxwidgets.org/wiki.pl?WxSocket or
390 http://www.litwindow.com/knowhow/knowhow.html for more details.
7c913512 391
23324ae1
FM
392 @library{wxnet}
393 @category{net}
7c913512 394
e54c96f1 395 @see wxSocketEvent, wxSocketClient, wxSocketServer, @ref overview_samplesockets
23324ae1
FM
396 "Sockets sample"
397*/
398class wxSocketBase : public wxObject
399{
400public:
401 /**
7c913512
FM
402 Default constructor. Don't use it directly; instead, use
403 wxSocketClient to construct a socket client, or
23324ae1
FM
404 wxSocketServer to construct a socket server.
405 */
406 wxSocketBase();
407
408 /**
409 Destructor. Do not destroy a socket using the delete operator directly;
410 use Destroy() instead. Also, do not create
411 socket objects in the stack.
412 */
413 ~wxSocketBase();
414
415 /**
416 Functions that perform basic IO functionality.
23324ae1 417 Close()
3c4f71cc 418
23324ae1 419 Discard()
3c4f71cc 420
23324ae1 421 Peek()
3c4f71cc 422
23324ae1 423 Read()
3c4f71cc 424
23324ae1 425 ReadMsg()
3c4f71cc 426
23324ae1 427 Unread()
3c4f71cc 428
23324ae1 429 Write()
3c4f71cc 430
23324ae1 431 WriteMsg()
23324ae1 432 Functions that perform a timed wait on a certain IO condition.
23324ae1 433 InterruptWait()
3c4f71cc 434
23324ae1 435 Wait()
3c4f71cc 436
23324ae1 437 WaitForLost()
3c4f71cc 438
23324ae1 439 WaitForRead()
3c4f71cc 440
23324ae1 441 WaitForWrite()
3c4f71cc 442
4cc4bfaf 443 and also:
23324ae1 444 wxSocketServer::WaitForAccept
3c4f71cc 445
23324ae1 446 wxSocketClient::WaitOnConnect
23324ae1 447 Functions that allow applications to customize socket IO as needed.
23324ae1 448 GetFlags()
3c4f71cc 449
23324ae1 450 SetFlags()
3c4f71cc 451
23324ae1 452 SetTimeout()
3c4f71cc 453
23324ae1
FM
454 SetLocal()
455 */
456
457
458 /**
459 This function shuts down the socket, disabling further transmission and
460 reception of data; it also disables events for the socket and frees the
461 associated system resources. Upon socket destruction, Close is automatically
462 called, so in most cases you won't need to do it yourself, unless you
463 explicitly want to shut down the socket, typically to notify the peer
464 that you are closing the connection.
465 */
466 void Close();
467
468 /**
469 @ref construct() wxSocketBase
3c4f71cc 470
23324ae1 471 @ref destruct() ~wxSocketBase
3c4f71cc 472
23324ae1
FM
473 Destroy()
474 */
475
476
477 /**
478 Destroys the socket safely. Use this function instead of the delete operator,
479 since otherwise socket events could reach the application even after the
480 socket has been destroyed. To prevent this problem, this function appends
481 the wxSocket to a list of object to be deleted on idle time, after all
482 events have been processed. For the same reason, you should avoid creating
483 socket objects in the stack.
23324ae1 484 Destroy calls Close() automatically.
3c4f71cc 485
d29a9a8a 486 @return Always @true.
23324ae1
FM
487 */
488 bool Destroy();
489
490 /**
491 This function simply deletes all bytes in the incoming queue. This function
492 always returns immediately and its operation is not affected by IO flags.
23324ae1 493 Use LastCount() to verify the number of bytes actually discarded.
23324ae1
FM
494 If you use Error(), it will always return @false.
495 */
496 wxSocketBase Discard();
497
498 /**
499 Returns @true if an error occurred in the last IO operation.
23324ae1
FM
500 Use this function to check for an error condition after one of the
501 following calls: Discard, Peek, Read, ReadMsg, Unread, Write, WriteMsg.
c9157492
VZ
502
503 Notice that this function will return @true even if the other end of a
504 (connected, i.e. TCP) socket was orderly closed by the peer. Use
505 IsClosed() to check for this.
23324ae1 506 */
328f5751 507 bool Error() const;
23324ae1
FM
508
509 /**
7c913512 510 Returns a pointer of the client data for this socket, as set with
23324ae1
FM
511 SetClientData()
512 */
328f5751 513 void* GetClientData() const;
23324ae1
FM
514
515 /**
516 Returns current IO flags, as set with SetFlags()
517 */
328f5751 518 wxSocketFlags GetFlags() const;
23324ae1
FM
519
520 /**
521 This function returns the local address field of the socket. The local
522 address field contains the complete local address of the socket (local
523 address, local port, ...).
3c4f71cc 524
d29a9a8a 525 @return @true if no error happened, @false otherwise.
23324ae1 526 */
328f5751 527 bool GetLocal(wxSockAddress& addr) const;
23324ae1
FM
528
529 /**
7c913512 530 This function returns the peer address field of the socket. The peer
23324ae1
FM
531 address field contains the complete peer host address of the socket
532 (address, port, ...).
3c4f71cc 533
d29a9a8a 534 @return @true if no error happened, @false otherwise.
23324ae1 535 */
328f5751 536 bool GetPeer(wxSockAddress& addr) const;
23324ae1
FM
537
538 /**
539 Functions that allow applications to receive socket events.
23324ae1 540 Notify()
3c4f71cc 541
23324ae1 542 SetNotify()
3c4f71cc 543
23324ae1 544 GetClientData()
3c4f71cc 545
23324ae1 546 SetClientData()
3c4f71cc 547
23324ae1
FM
548 SetEventHandler()
549 */
550
551
552 /**
553 Use this function to interrupt any wait operation currently in progress.
554 Note that this is not intended as a regular way to interrupt a Wait call,
555 but only as an escape mechanism for exceptional situations where it is
556 absolutely necessary to use it, for example to abort an operation due to
557 some exception or abnormal problem. InterruptWait is automatically called
558 when you Close() a socket (and thus also upon
559 socket destruction), so you don't need to use it in these cases.
7c913512
FM
560 Wait(),
561 wxSocketServer::WaitForAccept,
562 WaitForLost(),
563 WaitForRead(),
564 WaitForWrite(),
23324ae1
FM
565 wxSocketClient::WaitOnConnect
566 */
567 void InterruptWait();
568
569 /**
570 Returns @true if the socket is connected.
571 */
328f5751 572 bool IsConnected() const;
23324ae1 573
c9157492
VZ
574 /**
575 Return @true if the other end of the socket was closed by the peer.
576
577 Notice that Error() will return @true as well when this happens.
578 */
579 bool IsClosed() const;
580
23324ae1
FM
581 /**
582 This function waits until the socket is readable. This might mean that
583 queued data is available for reading or, for streamed sockets, that
584 the connection has been closed, so that a read operation will complete
585 immediately without blocking (unless the @b wxSOCKET_WAITALL flag
586 is set, in which case the operation might still block).
587 */
328f5751 588 bool IsData() const;
23324ae1
FM
589
590 /**
591 Returns @true if the socket is not connected.
592 */
328f5751 593 bool IsDisconnected() const;
23324ae1
FM
594
595 /**
596 Returns @true if the socket is initialized and ready and @false in other
597 cases.
598 */
328f5751 599 bool IsOk() const;
23324ae1
FM
600
601 /**
602 Returns the number of bytes read or written by the last IO call.
23324ae1
FM
603 Use this function to get the number of bytes actually transferred
604 after using one of the following IO calls: Discard, Peek, Read,
605 ReadMsg, Unread, Write, WriteMsg.
606 */
328f5751 607 wxUint32 LastCount() const;
23324ae1
FM
608
609 /**
610 Returns the last wxSocket error. See @ref overview_wxsocketbase "wxSocket
611 errors".
23324ae1
FM
612 Please note that this function merely returns the last error code,
613 but it should not be used to determine if an error has occurred (this
614 is because successful operations do not change the LastError value).
615 Use Error() first, in order to determine
616 if the last IO call failed. If this returns @true, use LastError
617 to discover the cause of the error.
618 */
328f5751 619 wxSocketError LastError() const;
23324ae1
FM
620
621 /**
4cc4bfaf
FM
622 According to the @a notify value, this function enables
623 or disables socket events. If @a notify is @true, the events
23324ae1 624 configured with SetNotify() will
4cc4bfaf 625 be sent to the application. If @a notify is @false; no events
23324ae1
FM
626 will be sent.
627 */
628 void Notify(bool notify);
629
630 /**
4cc4bfaf 631 This function peeks a buffer of @a nbytes bytes from the socket.
23324ae1 632 Peeking a buffer doesn't delete it from the socket input queue.
23324ae1 633 Use LastCount() to verify the number of bytes actually peeked.
23324ae1 634 Use Error() to determine if the operation succeeded.
3c4f71cc 635
7c913512 636 @param buffer
4cc4bfaf 637 Buffer where to put peeked data.
7c913512 638 @param nbytes
4cc4bfaf 639 Number of bytes.
3c4f71cc 640
d29a9a8a 641 @return Returns a reference to the current object.
3c4f71cc 642
4cc4bfaf
FM
643 @see Error(), LastError(), LastCount(),
644 SetFlags()
23324ae1 645 */
4cc4bfaf 646 wxSocketBase Peek(void* buffer, wxUint32 nbytes);
23324ae1
FM
647
648 /**
4cc4bfaf 649 This function reads a buffer of @a nbytes bytes from the socket.
23324ae1 650 Use LastCount() to verify the number of bytes actually read.
23324ae1 651 Use Error() to determine if the operation succeeded.
3c4f71cc 652
7c913512 653 @param buffer
4cc4bfaf 654 Buffer where to put read data.
7c913512 655 @param nbytes
4cc4bfaf 656 Number of bytes.
3c4f71cc 657
d29a9a8a 658 @return Returns a reference to the current object.
3c4f71cc 659
4cc4bfaf
FM
660 @see Error(), LastError(), LastCount(),
661 SetFlags()
23324ae1 662 */
4cc4bfaf 663 wxSocketBase Read(void* buffer, wxUint32 nbytes);
23324ae1
FM
664
665 /**
7c913512 666 This function reads a buffer sent by WriteMsg()
23324ae1
FM
667 on a socket. If the buffer passed to the function isn't big enough, the
668 remaining bytes will be discarded. This function always waits for the
669 buffer to be entirely filled, unless an error occurs.
23324ae1 670 Use LastCount() to verify the number of bytes actually read.
23324ae1 671 Use Error() to determine if the operation succeeded.
3c4f71cc 672
7c913512 673 @param buffer
4cc4bfaf 674 Buffer where to put read data.
7c913512 675 @param nbytes
4cc4bfaf 676 Size of the buffer.
3c4f71cc 677
d29a9a8a 678 @return Returns a reference to the current object.
3c4f71cc 679
4cc4bfaf
FM
680 @see Error(), LastError(), LastCount(),
681 SetFlags(), WriteMsg()
23324ae1 682 */
4cc4bfaf 683 wxSocketBase ReadMsg(void* buffer, wxUint32 nbytes);
23324ae1
FM
684
685 /**
686 This function restores the previous state of the socket, as saved
687 with SaveState()
23324ae1 688 Calls to SaveState and RestoreState can be nested.
3c4f71cc 689
4cc4bfaf 690 @see SaveState()
23324ae1
FM
691 */
692 void RestoreState();
693
694 /**
695 This function saves the current state of the socket in a stack. Socket
696 state includes flags, as set with SetFlags(),
7c913512
FM
697 event mask, as set with SetNotify() and
698 Notify(), user data, as set with
23324ae1 699 SetClientData().
23324ae1 700 Calls to SaveState and RestoreState can be nested.
3c4f71cc 701
4cc4bfaf 702 @see RestoreState()
23324ae1
FM
703 */
704 void SaveState();
705
706 /**
707 Sets user-supplied client data for this socket. All socket events will
708 contain a pointer to this data, which can be retrieved with
709 the wxSocketEvent::GetClientData function.
710 */
4cc4bfaf 711 void SetClientData(void* data);
23324ae1
FM
712
713 /**
714 Sets an event handler to be called when a socket event occurs. The
715 handler will be called for those events for which notification is
7c913512 716 enabled with SetNotify() and
23324ae1 717 Notify().
3c4f71cc 718
7c913512 719 @param handler
4cc4bfaf 720 Specifies the event handler you want to use.
7c913512 721 @param id
4cc4bfaf 722 The id of socket event.
3c4f71cc 723
4cc4bfaf 724 @see SetNotify(), Notify(), wxSocketEvent, wxEvtHandler
23324ae1
FM
725 */
726 void SetEventHandler(wxEvtHandler& handler, int id = -1);
727
728 /**
729 Use SetFlags to customize IO operation for this socket.
4cc4bfaf 730 The @a flags parameter may be a combination of flags ORed together.
23324ae1 731 The following flags can be used:
3c4f71cc 732
23324ae1 733 @b wxSOCKET_NONE
3c4f71cc 734
23324ae1 735 Normal functionality.
3c4f71cc 736
23324ae1 737 @b wxSOCKET_NOWAIT
3c4f71cc 738
23324ae1 739 Read/write as much data as possible and return immediately.
3c4f71cc 740
23324ae1 741 @b wxSOCKET_WAITALL
3c4f71cc 742
23324ae1 743 Wait for all required data to be read/written unless an error occurs.
3c4f71cc 744
23324ae1 745 @b wxSOCKET_BLOCK
3c4f71cc 746
23324ae1 747 Block the GUI (do not yield) while reading/writing data.
3c4f71cc 748
23324ae1 749 @b wxSOCKET_REUSEADDR
3c4f71cc 750
23324ae1 751 Allows the use of an in-use port (wxServerSocket only)
3c4f71cc 752
23324ae1 753 @b wxSOCKET_BROADCAST
3c4f71cc 754
23324ae1 755 Switches the socket to broadcast mode
3c4f71cc 756
23324ae1 757 @b wxSOCKET_NOBIND
3c4f71cc 758
23324ae1
FM
759 Stops the socket from being bound to a specific adapter (normally used in
760 conjunction with @b wxSOCKET_BROADCAST)
3c4f71cc 761
23324ae1 762 A brief overview on how to use these flags follows.
23324ae1
FM
763 If no flag is specified (this is the same as @b wxSOCKET_NONE),
764 IO calls will return after some data has been read or written, even
765 when the transfer might not be complete. This is the same as issuing
766 exactly one blocking low-level call to recv() or send(). Note
767 that @e blocking here refers to when the function returns, not
768 to whether the GUI blocks during this time.
23324ae1
FM
769 If @b wxSOCKET_NOWAIT is specified, IO calls will return immediately.
770 Read operations will retrieve only available data. Write operations will
771 write as much data as possible, depending on how much space is available
772 in the output buffer. This is the same as issuing exactly one nonblocking
773 low-level call to recv() or send(). Note that @e nonblocking here
774 refers to when the function returns, not to whether the GUI blocks during
775 this time.
23324ae1
FM
776 If @b wxSOCKET_WAITALL is specified, IO calls won't return until ALL
777 the data has been read or written (or until an error occurs), blocking if
778 necessary, and issuing several low level calls if necessary. This is the
779 same as having a loop which makes as many blocking low-level calls to
780 recv() or send() as needed so as to transfer all the data. Note
781 that @e blocking here refers to when the function returns, not
782 to whether the GUI blocks during this time.
23324ae1
FM
783 The @b wxSOCKET_BLOCK flag controls whether the GUI blocks during
784 IO operations. If this flag is specified, the socket will not yield
785 during IO calls, so the GUI will remain blocked until the operation
786 completes. If it is not used, then the application must take extra
787 care to avoid unwanted reentrance.
23324ae1
FM
788 The @b wxSOCKET_REUSEADDR flag controls the use of the SO_REUSEADDR standard
789 setsockopt() flag. This flag allows the socket to bind to a port that is
790 already in use.
791 This is mostly used on UNIX-based systems to allow rapid starting and stopping
7c913512 792 of a server -
23324ae1
FM
793 otherwise you may have to wait several minutes for the port to become available.
794 wxSOCKET_REUSEADDR can also be used with socket clients to (re)bind to a
795 particular local port
796 for an outgoing connection.
797 This option can have surprising platform dependent behavior, so check the
798 documentation for
799 your platform's implementation of setsockopt(). Note that on BSD-based systems
800 (e.g. Mac OS X),
801 use of wxSOCKET_REUSEADDR implies SO_REUSEPORT in addition to SO_REUSEADDR to
802 be consistent
803 with Windows.
23324ae1
FM
804 The @b wxSOCKET_BROADCAST flag controls the use of the SO_BROADCAST standard
805 setsockopt() flag. This flag allows the socket to use the broadcast address,
806 and is generally
807 used in conjunction with @b wxSOCKET_NOBIND and wxIPaddress::BroadcastAddress.
23324ae1 808 So:
23324ae1 809 @b wxSOCKET_NONE will try to read at least SOME data, no matter how much.
23324ae1
FM
810 @b wxSOCKET_NOWAIT will always return immediately, even if it cannot
811 read or write ANY data.
23324ae1
FM
812 @b wxSOCKET_WAITALL will only return when it has read or written ALL
813 the data.
23324ae1
FM
814 @b wxSOCKET_BLOCK has nothing to do with the previous flags and
815 it controls whether the GUI blocks.
23324ae1
FM
816 @b wxSOCKET_REUSEADDR controls special platform-specific behavior for
817 reusing local addresses/ports.
818 */
819 void SetFlags(wxSocketFlags flags);
820
821 /**
822 This function allows you to set the local address and port,
823 useful when an application needs to reuse a particular port. When
824 a local port is set for a wxSocketClient,
825 @b bind will be called before @b connect.
826 */
72ac4e88 827 bool SetLocal(const wxIPV4address& local);
23324ae1
FM
828
829 /**
830 SetNotify specifies which socket events are to be sent to the event handler.
4cc4bfaf 831 The @a flags parameter may be combination of flags ORed together. The
23324ae1 832 following flags can be used:
3c4f71cc 833
23324ae1 834 @b wxSOCKET_INPUT_FLAG
3c4f71cc 835
23324ae1 836 to receive wxSOCKET_INPUT
3c4f71cc 837
23324ae1 838 @b wxSOCKET_OUTPUT_FLAG
3c4f71cc 839
23324ae1 840 to receive wxSOCKET_OUTPUT
3c4f71cc 841
23324ae1 842 @b wxSOCKET_CONNECTION_FLAG
3c4f71cc 843
23324ae1 844 to receive wxSOCKET_CONNECTION
3c4f71cc 845
23324ae1 846 @b wxSOCKET_LOST_FLAG
3c4f71cc 847
23324ae1 848 to receive wxSOCKET_LOST
3c4f71cc 849
23324ae1 850 For example:
3c4f71cc 851
23324ae1
FM
852 In this example, the user will be notified about incoming socket data and
853 whenever the connection is closed.
23324ae1
FM
854 For more information on socket events see @ref overview_wxsocketbase "wxSocket
855 events".
856 */
857 void SetNotify(wxSocketEventFlags flags);
858
859 /**
860 This function sets the default socket timeout in seconds. This timeout
861 applies to all IO calls, and also to the Wait() family
862 of functions if you don't specify a wait interval. Initially, the default
863 timeout is 10 minutes.
864 */
865 void SetTimeout(int seconds);
866
867 /**
868 Functions to retrieve current state and miscellaneous info.
23324ae1 869 Error()
3c4f71cc 870
23324ae1 871 GetLocal()
3c4f71cc 872
23324ae1
FM
873 GetPeer()
874 IsConnected()
3c4f71cc 875
23324ae1 876 IsData()
3c4f71cc 877
23324ae1 878 IsDisconnected()
3c4f71cc 879
23324ae1 880 LastCount()
3c4f71cc 881
23324ae1 882 LastError()
3c4f71cc 883
23324ae1 884 IsOk()
3c4f71cc 885
23324ae1 886 SaveState()
3c4f71cc 887
23324ae1
FM
888 RestoreState()
889 */
890
891
892 /**
893 This function unreads a buffer. That is, the data in the buffer is put back
894 in the incoming queue. This function is not affected by wxSocket flags.
23324ae1 895 If you use LastCount(), it will always return @e nbytes.
23324ae1 896 If you use Error(), it will always return @false.
3c4f71cc 897
7c913512 898 @param buffer
4cc4bfaf 899 Buffer to be unread.
7c913512 900 @param nbytes
4cc4bfaf 901 Number of bytes.
3c4f71cc 902
d29a9a8a 903 @return Returns a reference to the current object.
3c4f71cc 904
4cc4bfaf 905 @see Error(), LastCount(), LastError()
23324ae1 906 */
4cc4bfaf 907 wxSocketBase Unread(const void* buffer, wxUint32 nbytes);
23324ae1
FM
908
909 /**
910 This function waits until any of the following conditions is @true:
3c4f71cc 911
23324ae1
FM
912 The socket becomes readable.
913 The socket becomes writable.
914 An ongoing connection request has completed (wxSocketClient only)
915 An incoming connection request has arrived (wxSocketServer only)
916 The connection has been closed.
23324ae1
FM
917 Note that it is recommended to use the individual Wait functions
918 to wait for the required condition, instead of this one.
3c4f71cc 919
7c913512 920 @param seconds
4cc4bfaf
FM
921 Number of seconds to wait.
922 If -1, it will wait for the default timeout,
923 as set with SetTimeout.
7c913512 924 @param millisecond
4cc4bfaf 925 Number of milliseconds to wait.
3c4f71cc 926
d29a9a8a 927 @return Returns @true when any of the above conditions is satisfied,
4cc4bfaf 928 @false if the timeout was reached.
3c4f71cc 929
4cc4bfaf
FM
930 @see InterruptWait(), wxSocketServer::WaitForAccept,
931 WaitForLost(), WaitForRead(),
932 WaitForWrite(), wxSocketClient::WaitOnConnect
23324ae1
FM
933 */
934 bool Wait(long seconds = -1, long millisecond = 0);
935
936 /**
937 This function waits until the connection is lost. This may happen if
938 the peer gracefully closes the connection or if the connection breaks.
3c4f71cc 939
7c913512 940 @param seconds
4cc4bfaf
FM
941 Number of seconds to wait.
942 If -1, it will wait for the default timeout,
943 as set with SetTimeout.
7c913512 944 @param millisecond
4cc4bfaf 945 Number of milliseconds to wait.
3c4f71cc 946
d29a9a8a 947 @return Returns @true if the connection was lost, @false if the timeout
4cc4bfaf 948 was reached.
3c4f71cc 949
4cc4bfaf 950 @see InterruptWait(), Wait()
23324ae1 951 */
fc377125 952 bool WaitForLost(long seconds = -1, long millisecond = 0);
23324ae1
FM
953
954 /**
955 This function waits until the socket is readable. This might mean that
956 queued data is available for reading or, for streamed sockets, that
957 the connection has been closed, so that a read operation will complete
958 immediately without blocking (unless the @b wxSOCKET_WAITALL flag
959 is set, in which case the operation might still block).
3c4f71cc 960
7c913512 961 @param seconds
4cc4bfaf
FM
962 Number of seconds to wait.
963 If -1, it will wait for the default timeout,
964 as set with SetTimeout.
7c913512 965 @param millisecond
4cc4bfaf 966 Number of milliseconds to wait.
3c4f71cc 967
d29a9a8a 968 @return Returns @true if the socket becomes readable, @false on timeout.
3c4f71cc 969
4cc4bfaf 970 @see InterruptWait(), Wait()
23324ae1
FM
971 */
972 bool WaitForRead(long seconds = -1, long millisecond = 0);
973
974 /**
975 This function waits until the socket becomes writable. This might mean that
976 the socket is ready to send new data, or for streamed sockets, that the
977 connection has been closed, so that a write operation is guaranteed to
978 complete immediately (unless the @b wxSOCKET_WAITALL flag is set,
979 in which case the operation might still block).
3c4f71cc 980
7c913512 981 @param seconds
4cc4bfaf
FM
982 Number of seconds to wait.
983 If -1, it will wait for the default timeout,
984 as set with SetTimeout.
7c913512 985 @param millisecond
4cc4bfaf 986 Number of milliseconds to wait.
3c4f71cc 987
d29a9a8a 988 @return Returns @true if the socket becomes writable, @false on timeout.
3c4f71cc 989
4cc4bfaf 990 @see InterruptWait(), Wait()
23324ae1
FM
991 */
992 bool WaitForWrite(long seconds = -1, long millisecond = 0);
993
994 /**
4cc4bfaf 995 This function writes a buffer of @a nbytes bytes to the socket.
23324ae1 996 Use LastCount() to verify the number of bytes actually written.
23324ae1 997 Use Error() to determine if the operation succeeded.
3c4f71cc 998
7c913512 999 @param buffer
4cc4bfaf 1000 Buffer with the data to be sent.
7c913512 1001 @param nbytes
4cc4bfaf 1002 Number of bytes.
3c4f71cc 1003
d29a9a8a 1004 @return Returns a reference to the current object.
3c4f71cc 1005
4cc4bfaf
FM
1006 @see Error(), LastError(), LastCount(),
1007 SetFlags()
23324ae1 1008 */
4cc4bfaf 1009 wxSocketBase Write(const void* buffer, wxUint32 nbytes);
23324ae1
FM
1010
1011 /**
4cc4bfaf 1012 This function writes a buffer of @a nbytes bytes from the socket, but it
7c913512
FM
1013 writes a short header before so that ReadMsg()
1014 knows how much data should it actually read. So, a buffer sent with WriteMsg
23324ae1
FM
1015 @b must be read with ReadMsg. This function always waits for the entire
1016 buffer to be sent, unless an error occurs.
23324ae1 1017 Use LastCount() to verify the number of bytes actually written.
23324ae1 1018 Use Error() to determine if the operation succeeded.
3c4f71cc 1019
7c913512 1020 @param buffer
4cc4bfaf 1021 Buffer with the data to be sent.
7c913512 1022 @param nbytes
4cc4bfaf 1023 Number of bytes to send.
3c4f71cc 1024
d29a9a8a 1025 @return Returns a reference to the current object.
23324ae1 1026 */
4cc4bfaf 1027 wxSocketBase WriteMsg(const void* buffer, wxUint32 nbytes);
23324ae1
FM
1028};
1029
1030
e54c96f1 1031
23324ae1
FM
1032/**
1033 @class wxDatagramSocket
7c913512
FM
1034
1035
23324ae1
FM
1036 @library{wxnet}
1037 @category{FIXME}
7c913512 1038
e54c96f1 1039 @see wxSocketBase::Error, wxSocketBase::LastError, wxSocketBase::LastCount,
23324ae1
FM
1040 wxSocketBase::SetFlags,
1041*/
1042class wxDatagramSocket : public wxSocketBase
1043{
1044public:
1045 /**
1046 Constructor.
3c4f71cc 1047
7c913512 1048 @param flags
4cc4bfaf 1049 Socket flags (See wxSocketBase::SetFlags)
23324ae1
FM
1050 */
1051 wxDatagramSocket(wxSocketFlags flags = wxSOCKET_NONE);
1052
1053 /**
1054 Destructor. Please see wxSocketBase::Destroy.
1055 */
1056 ~wxDatagramSocket();
1057
1058 /**
4cc4bfaf 1059 This function reads a buffer of @a nbytes bytes from the socket.
23324ae1 1060 Use wxSocketBase::LastCount to verify the number of bytes actually read.
23324ae1 1061 Use wxSocketBase::Error to determine if the operation succeeded.
3c4f71cc 1062
7c913512 1063 @param address
4cc4bfaf
FM
1064 Any address - will be overwritten with the address of the peer that sent
1065 that data.
7c913512 1066 @param buffer
4cc4bfaf 1067 Buffer where to put read data.
7c913512 1068 @param nbytes
4cc4bfaf 1069 Number of bytes.
3c4f71cc 1070
d29a9a8a 1071 @return Returns a reference to the current object, and the address of
4cc4bfaf 1072 the peer that sent the data on address param.
3c4f71cc 1073
4cc4bfaf
FM
1074 @see wxSocketBase::Error, wxSocketBase::LastError, wxSocketBase::LastCount,
1075 wxSocketBase::SetFlags,
23324ae1
FM
1076 */
1077 wxDatagramSocket ReceiveFrom(wxSockAddress& address,
4cc4bfaf 1078 void* buffer,
23324ae1
FM
1079 wxUint32 nbytes);
1080
1081 /**
4cc4bfaf 1082 This function writes a buffer of @a nbytes bytes to the socket.
23324ae1 1083 Use wxSocketBase::LastCount to verify the number of bytes actually wrote.
23324ae1 1084 Use wxSocketBase::Error to determine if the operation succeeded.
3c4f71cc 1085
7c913512 1086 @param address
4cc4bfaf 1087 The address of the destination peer for this data.
7c913512 1088 @param buffer
4cc4bfaf 1089 Buffer where read data is.
7c913512 1090 @param nbytes
4cc4bfaf 1091 Number of bytes.
3c4f71cc 1092
d29a9a8a 1093 @return Returns a reference to the current object.
23324ae1
FM
1094 */
1095 wxDatagramSocket SendTo(const wxSockAddress& address,
4cc4bfaf 1096 const void* buffer,
23324ae1
FM
1097 wxUint32 nbytes);
1098};
e54c96f1 1099