Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: sdk/lib/io/socket.dart

Issue 85993002: Add UDP support to dart:io (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix Windows build Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/_internal/lib/io_patch.dart ('k') | tests/standalone/io/raw_datagram_socket_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.io; 5 part of dart.io;
6 6
7 7
8 /** 8 /**
9 * [InternetAddressType] is the type an [InternetAddress]. Currently, 9 * [InternetAddressType] is the type an [InternetAddress]. Currently,
10 * IP version 4 (IPv4) and IP version 6 (IPv6) are supported. 10 * IP version 4 (IPv4) and IP version 6 (IPv6) are supported.
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 class SocketOption { 316 class SocketOption {
317 /** 317 /**
318 * Enable or disable no-delay on the socket. If TCP_NODELAY is enabled, the 318 * Enable or disable no-delay on the socket. If TCP_NODELAY is enabled, the
319 * socket will not buffer data internally, but instead write each data chunk 319 * socket will not buffer data internally, but instead write each data chunk
320 * as an invidual TCP packet. 320 * as an invidual TCP packet.
321 * 321 *
322 * TCP_NODELAY is disabled by default. 322 * TCP_NODELAY is disabled by default.
323 */ 323 */
324 static const SocketOption TCP_NODELAY = const SocketOption._(0); 324 static const SocketOption TCP_NODELAY = const SocketOption._(0);
325 325
326 static const SocketOption _IP_MULTICAST_LOOP = const SocketOption._(1);
327 static const SocketOption _IP_MULTICAST_HOPS = const SocketOption._(2);
328 static const SocketOption _IP_MULTICAST_IF = const SocketOption._(3);
329 static const SocketOption _IP_BROADCAST = const SocketOption._(4);
330
326 const SocketOption._(this._value); 331 const SocketOption._(this._value);
327 final _value; 332 final _value;
328 } 333 }
329 334
330 /** 335 /**
331 * Events for the [RawSocket]. 336 * Events for the [RawSocket].
332 */ 337 */
333 class RawSocketEvent { 338 class RawSocketEvent {
334 static const RawSocketEvent READ = const RawSocketEvent._(0); 339 static const RawSocketEvent READ = const RawSocketEvent._(0);
335 static const RawSocketEvent WRITE = const RawSocketEvent._(1); 340 static const RawSocketEvent WRITE = const RawSocketEvent._(1);
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 */ 504 */
500 InternetAddress get address; 505 InternetAddress get address;
501 506
502 /** 507 /**
503 * Returns the remote [InternetAddress] connected to by this socket. 508 * Returns the remote [InternetAddress] connected to by this socket.
504 */ 509 */
505 InternetAddress get remoteAddress; 510 InternetAddress get remoteAddress;
506 } 511 }
507 512
508 513
514 /**
515 * Datagram package. Data send to and received from datagram sockets
516 * contains the internet address and port of the destination or source
517 * togeter with the data.
518 */
519 class Datagram {
520 List<int> data;
521 InternetAddress address;
522 int port;
523
524 Datagram(this.data, this.address, this.port);
525 }
526
527
528 /**
529 * The [RawDatagramSocket] is a low-level interface to an UDP socket,
530 * exposing the raw events signaled by the system. It's a [Stream] of
531 * [RawSocketEvent]s.
532 *
533 * Note that the event [RawSocketEvent.READ_CLOSED] will never be
534 * received as an UDP socket cannot be closed by a remote peer.
535 */
536 abstract class RawDatagramSocket extends Stream<RawSocketEvent> {
537 /**
538 * Creates a new raw datagram socket binding it to an address and
539 * port.
540 */
541 external static Future<RawDatagramSocket> bind(
542 host, int port, {bool reuseAddress: true});
543
544 /**
545 * Returns the port used by this socket.
546 */
547 int get port;
548
549 /**
550 * Returns the address used by this socket.
551 */
552 InternetAddress get address;
553
554 /**
555 * Close the datagram socket.
556 */
557 void close();
558
559 /**
560 * Send a datagram.
561 *
562 * Returns the number of bytes written. This will always be either
563 * the size of [buffer] or `0`.
564 */
565 int send(List<int> buffer, InternetAddress address, int port);
566
567 /**
568 * Receive a datagram. If there are no datagrams available `null` is
569 * returned.
570 */
571 Datagram receive();
572
573 /**
574 * Join a multicast group.
575 *
576 * If an error occur when trying to join the multicast group an
577 * exception is thrown.
578 */
579 void joinMulticast(InternetAddress group, {NetworkInterface interface});
580
581 /**
582 * Leave a multicast group.
583 *
584 * If an error occur when trying to join the multicase group an
585 * exception is thrown.
586 */
587 void leaveMulticast(InternetAddress group, {NetworkInterface interface});
588
589 /**
590 * Set or get, if the [RawDatagramSocket] should listen for
591 * [RawSocketEvent.READ] events. Default is [true].
592 */
593 bool readEventsEnabled;
594
595 /**
596 * Set or get, if the [RawDatagramSocket] should listen for
597 * [RawSocketEvent.WRITE] events. Default is [true]. This is a
598 * one-shot listener, and writeEventsEnabled must be set to true
599 * again to receive another write event.
600 */
601 bool writeEventsEnabled;
602
603 /**
604 * Set or get, whether multicast traffic is looped back to the host.
605 *
606 * By default multicast loopback is enabled.
607 */
608 bool multicastLoopback;
609
610 /**
611 * Set or get, the maximum network hops for multicast packages
612 * originating from this socket.
613 *
614 * For IPv4 this is referred to as TTL (time to live).
615 *
616 * By default this value is 1 causing multicast traffic to stay on
617 * the local network.
618 */
619 int multicastHops;
620
621 /**
622 * Set or get, the network interface used for outgoing multicast packages.
623 *
624 * A value of `null`indicate that the system chooses the network
625 * interface to use.
626 *
627 * By default this value is `null`
628 */
629 NetworkInterface multicastInterface;
630
631 /**
632 * Set or get, whether IPv4 broadcast is enabled.
633 *
634 * IPv4 broadcast needs to be enabled by the sender for sending IPv4
635 * broadcast packages. By default IPv4 broadcast is disabled.
636 *
637 * For IPv6 there is no general broadcast mechanism. Use multicast
638 * instead.
639 */
640 bool broadcastEnabled;
641 }
642
643
509 class SocketException implements IOException { 644 class SocketException implements IOException {
510 final String message; 645 final String message;
511 final OSError osError; 646 final OSError osError;
512 final InternetAddress address; 647 final InternetAddress address;
513 final int port; 648 final int port;
514 649
515 const SocketException(String this.message, 650 const SocketException(String this.message,
516 {OSError this.osError, 651 {OSError this.osError,
517 InternetAddress this.address, 652 InternetAddress this.address,
518 int this.port}); 653 int this.port});
(...skipping 11 matching lines...) Expand all
530 } 665 }
531 if (address != null) { 666 if (address != null) {
532 sb.write(", address = ${address.host}"); 667 sb.write(", address = ${address.host}");
533 } 668 }
534 if (port != null) { 669 if (port != null) {
535 sb.write(", port = $port"); 670 sb.write(", port = $port");
536 } 671 }
537 return sb.toString(); 672 return sb.toString();
538 } 673 }
539 } 674 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/lib/io_patch.dart ('k') | tests/standalone/io/raw_datagram_socket_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698