Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 311 class SocketOption { | 311 class SocketOption { |
| 312 /** | 312 /** |
| 313 * Enable or disable no-delay on the socket. If TCP_NODELAY is enabled, the | 313 * Enable or disable no-delay on the socket. If TCP_NODELAY is enabled, the |
| 314 * socket will not buffer data internally, but instead write each data chunk | 314 * socket will not buffer data internally, but instead write each data chunk |
| 315 * as an invidual TCP packet. | 315 * as an invidual TCP packet. |
| 316 * | 316 * |
| 317 * TCP_NODELAY is disabled by default. | 317 * TCP_NODELAY is disabled by default. |
| 318 */ | 318 */ |
| 319 static const SocketOption TCP_NODELAY = const SocketOption._(0); | 319 static const SocketOption TCP_NODELAY = const SocketOption._(0); |
| 320 | 320 |
| 321 static const SocketOption _IP_MULTICAST_LOOP = const SocketOption._(1); | |
|
Anders Johnsen
2013/11/25 18:00:06
Should we move private ones to start by, say 16?
Søren Gjesse
2013/11/28 13:58:52
The numbers are not visible outside, so it does no
| |
| 322 static const SocketOption _IP_MULTICAST_TTL = const SocketOption._(2); | |
| 323 static const SocketOption _IP_BROADCAST = const SocketOption._(3); | |
| 324 | |
| 321 const SocketOption._(this._value); | 325 const SocketOption._(this._value); |
| 322 final _value; | 326 final _value; |
| 323 } | 327 } |
| 324 | 328 |
| 325 /** | 329 /** |
| 326 * Events for the [RawSocket]. | 330 * Events for the [RawSocket]. |
| 327 */ | 331 */ |
| 328 class RawSocketEvent { | 332 class RawSocketEvent { |
| 329 static const RawSocketEvent READ = const RawSocketEvent._(0); | 333 static const RawSocketEvent READ = const RawSocketEvent._(0); |
| 330 static const RawSocketEvent WRITE = const RawSocketEvent._(1); | 334 static const RawSocketEvent WRITE = const RawSocketEvent._(1); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 494 */ | 498 */ |
| 495 InternetAddress get address; | 499 InternetAddress get address; |
| 496 | 500 |
| 497 /** | 501 /** |
| 498 * Returns the remote [InternetAddress] connected to by this socket. | 502 * Returns the remote [InternetAddress] connected to by this socket. |
| 499 */ | 503 */ |
| 500 InternetAddress get remoteAddress; | 504 InternetAddress get remoteAddress; |
| 501 } | 505 } |
| 502 | 506 |
| 503 | 507 |
| 508 /** | |
| 509 * Datagram package. Data send to and received from datagram sockets | |
| 510 * contains the internet address and port of the destination or source | |
| 511 * togeter with the data. | |
| 512 */ | |
| 513 class Datagram { | |
| 514 List<int> data; | |
| 515 InternetAddess address; | |
| 516 int port; | |
| 517 | |
| 518 Datagram(this.data, this.address, this.port); | |
| 519 } | |
| 520 | |
| 521 | |
| 522 /** | |
| 523 * The [RawDatagramSocket] is a low-level interface to an UDP socket, | |
| 524 * exposing the raw events signaled by the system. It's a [Stream] of | |
| 525 * [RawSocketEvent]s. | |
| 526 * | |
| 527 * Note that the event [RawSocketEvent.CLOSED] will never be received | |
| 528 * as there is no connection which can be closed by a remote peer. | |
|
Anders Johnsen
2013/11/25 18:00:06
'[...] as an UDP socket cannot be closed by a remo
Søren Gjesse
2013/11/28 13:58:52
Done.
| |
| 529 */ | |
| 530 abstract class RawDatagramSocket extends Stream { | |
|
Anders Johnsen
2013/11/25 18:00:06
Can the Stream type be Stream<RawSocketEvent> ?
Søren Gjesse
2013/11/28 13:58:52
Done.
| |
| 531 /** | |
| 532 * Creates a new raw datagram socket binding it to an address and | |
| 533 * port. | |
| 534 */ | |
| 535 factory RawDatagramSocket(InternetAddress address, int port) => | |
|
Anders Johnsen
2013/11/25 18:00:06
I think this should be like a Socket and ServerSoc
Søren Gjesse
2013/11/28 13:58:52
I will make it return a future, and change the typ
| |
| 536 new _RawDatagramSocket(address, port); | |
| 537 | |
| 538 /** | |
| 539 * Returns the port used by this socket. | |
| 540 */ | |
| 541 int get port; | |
| 542 | |
| 543 /** | |
| 544 * Returns the address used by this socket. | |
| 545 */ | |
| 546 InternetAddress get address; | |
| 547 | |
| 548 /** | |
| 549 * Close the datagram socket. | |
| 550 */ | |
| 551 void close(); | |
|
Anders Johnsen
2013/11/25 18:00:06
Does directional-close work for UDP sockets? (I'm
Søren Gjesse
2013/11/28 13:58:52
No the shutdown is a TCP thing.
| |
| 552 | |
| 553 /** | |
| 554 * Send a datagram. | |
| 555 * | |
| 556 * Returns `true` if the datagram was send. | |
| 557 */ | |
| 558 bool send(Datagram datagram); | |
| 559 | |
| 560 /** | |
| 561 * Send a datagram. | |
| 562 * | |
| 563 * Returns `true` if the datagram was send. | |
| 564 */ | |
| 565 bool sendTo(List<data> buffer, InternetAddress address, int port); | |
|
Anders Johnsen
2013/11/25 18:00:06
Having both send and sendTo, with so little differ
Søren Gjesse
2013/11/28 13:58:52
Removed one.
| |
| 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 join(InternetAddress group, [NetworkInterface interface]); | |
|
Anders Johnsen
2013/11/25 18:00:06
This is really cool, with the optional interface.
Søren Gjesse
2013/11/28 13:58:52
Done.
| |
| 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 leave(InternetAddress group, [NetworkInterface interface]); | |
|
Anders Johnsen
2013/11/25 18:00:06
Ditto.
Søren Gjesse
2013/11/28 13:58:52
Done.
| |
| 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; | |
|
Anders Johnsen
2013/11/25 18:00:06
Is it true by default? I thought it is only set to
Søren Gjesse
2013/11/28 13:58:52
It starts out as true.
| |
| 602 | |
| 603 /** | |
| 604 * Set or get, whether multicast traffic is looped back to the host. | |
|
Anders Johnsen
2013/11/25 18:00:06
This, and those below, needs a default value in do
Søren Gjesse
2013/11/28 13:58:52
Done.
| |
| 605 */ | |
| 606 bool multicastLoopback; | |
| 607 | |
| 608 /** | |
| 609 * Set or get, the TTL (time to live) for multicast traffic. | |
| 610 */ | |
| 611 int multicastTTL; | |
| 612 | |
| 613 /** | |
| 614 * Set or get, whether broadcast is enabled for the local interface. | |
| 615 */ | |
| 616 bool broadcastEnabled; | |
| 617 } | |
| 618 | |
| 619 | |
| 504 class SocketException implements IOException { | 620 class SocketException implements IOException { |
| 505 final String message; | 621 final String message; |
| 506 final OSError osError; | 622 final OSError osError; |
| 507 final InternetAddress address; | 623 final InternetAddress address; |
| 508 final int port; | 624 final int port; |
| 509 | 625 |
| 510 const SocketException(String this.message, | 626 const SocketException(String this.message, |
| 511 {OSError this.osError, | 627 {OSError this.osError, |
| 512 InternetAddress this.address, | 628 InternetAddress this.address, |
| 513 int this.port}); | 629 int this.port}); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 525 } | 641 } |
| 526 if (address != null) { | 642 if (address != null) { |
| 527 sb.write(", address = ${address.host}"); | 643 sb.write(", address = ${address.host}"); |
| 528 } | 644 } |
| 529 if (port != null) { | 645 if (port != null) { |
| 530 sb.write(", port = $port"); | 646 sb.write(", port = $port"); |
| 531 } | 647 } |
| 532 return sb.toString(); | 648 return sb.toString(); |
| 533 } | 649 } |
| 534 } | 650 } |
| OLD | NEW |