Chromium Code Reviews| Index: sdk/lib/io/socket.dart |
| diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart |
| index 2f789585e6ca4313485ed1cdc31a981035734921..b619feccd940f44ca7cef75652b6f43d258cd445 100644 |
| --- a/sdk/lib/io/socket.dart |
| +++ b/sdk/lib/io/socket.dart |
| @@ -323,6 +323,11 @@ class SocketOption { |
| */ |
| static const SocketOption TCP_NODELAY = const SocketOption._(0); |
| + static const SocketOption _IP_MULTICAST_LOOP = const SocketOption._(1); |
| + static const SocketOption _IP_MULTICAST_HOPS = const SocketOption._(2); |
| + static const SocketOption _IP_MULTICAST_IF = const SocketOption._(3); |
| + static const SocketOption _IP_BROADCAST = const SocketOption._(4); |
| + |
| const SocketOption._(this._value); |
| final _value; |
| } |
| @@ -506,6 +511,136 @@ abstract class Socket implements Stream<List<int>>, IOSink { |
| } |
| +/** |
| + * Datagram package. Data send to and received from datagram sockets |
| + * contains the internet address and port of the destination or source |
| + * togeter with the data. |
| + */ |
| +class Datagram { |
| + List<int> data; |
| + InternetAddress address; |
| + int port; |
| + |
| + Datagram(this.data, this.address, this.port); |
| +} |
| + |
| + |
| +/** |
| + * The [RawDatagramSocket] is a low-level interface to an UDP socket, |
| + * exposing the raw events signaled by the system. It's a [Stream] of |
| + * [RawSocketEvent]s. |
| + * |
| + * Note that the event [RawSocketEvent.READ_CLOSED] will never be |
| + * received as an UDP socket cannot be closed by a remote peer. |
| + */ |
| +abstract class RawDatagramSocket extends Stream<RawSocketEvent> { |
|
Anders Johnsen
2013/12/12 12:19:58
Maybe add a static bool 'isMulticastEnabled(Networ
Søren Gjesse
2013/12/12 15:44:39
We should definitely add more information like thi
|
| + /** |
| + * Creates a new raw datagram socket binding it to an address and |
| + * port. |
| + */ |
| + external static Future<RawDatagramSocket> bind( |
| + host, int port, {bool reuseAddress: true}); |
| + |
| + /** |
| + * Returns the port used by this socket. |
| + */ |
| + int get port; |
| + |
| + /** |
| + * Returns the address used by this socket. |
| + */ |
| + InternetAddress get address; |
| + |
| + /** |
| + * Close the datagram socket. |
| + */ |
| + void close(); |
| + |
| + /** |
| + * Send a datagram. |
| + * |
| + * Returns the number of bytes written. This will always be either |
| + * the size of [buffer] or `0`. |
| + */ |
| + int send(List<int> buffer, InternetAddress address, int port); |
| + |
| + /** |
| + * Receive a datagram. If there are no datagrams available `null` is |
| + * returned. |
| + */ |
| + Datagram receive(); |
| + |
| + /** |
| + * Join a multicast group. |
| + * |
| + * If an error occur when trying to join the multicast group an |
| + * exception is thrown. |
| + */ |
| + void joinMulticast(InternetAddress group, {NetworkInterface interface}); |
| + |
| + /** |
| + * Leave a multicast group. |
| + * |
| + * If an error occur when trying to join the multicase group an |
| + * exception is thrown. |
| + */ |
| + void leaveMulticast(InternetAddress group, {NetworkInterface interface}); |
| + |
| + /** |
| + * Set or get, if the [RawDatagramSocket] should listen for |
| + * [RawSocketEvent.READ] events. Default is [true]. |
| + */ |
| + bool readEventsEnabled; |
| + |
| + /** |
| + * Set or get, if the [RawDatagramSocket] should listen for |
| + * [RawSocketEvent.WRITE] events. Default is [true]. This is a |
| + * one-shot listener, and writeEventsEnabled must be set to true |
| + * again to receive another write event. |
| + */ |
| + bool writeEventsEnabled; |
| + |
| + /** |
| + * Set or get, whether multicast traffic is looped back to the host. |
| + * |
| + * By default multicast loopback is enabled. |
| + */ |
| + bool multicastLoopback; |
| + |
| + /** |
| + * Set or get, the maximum network hops for multicast packages |
| + * originating from this socket. |
| + * |
| + * For IPv4 this is referred to as TTL (time to live). |
| + * |
| + * By default this value is 1 causing multicast traffic to stay on |
| + * the local network. |
| + */ |
| + int multicastHops; |
| + |
| + /** |
| + * Set or get, the network interface used for outgoing multicast packages. |
| + * |
| + * A value of `null`indicate that the system chooses the network |
| + * interface to use. |
| + * |
| + * By default this value is `null` |
| + */ |
| + NetworkInterface multicastInterface; |
| + |
| + /** |
| + * Set or get, whether IPv4 broadcast is enabled. |
| + * |
| + * IPv4 broadcast needs to be enabled by the sender for sending IPv4 |
| + * broadcast packages. By default IPv4 broadcast is disabled. |
| + * |
| + * For IPv6 there is no general broadcast mechanism. Use multicast |
| + * instead. |
| + */ |
| + bool broadcastEnabled; |
| +} |
| + |
| + |
| class SocketException implements IOException { |
| final String message; |
| final OSError osError; |