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