| 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 @patch class RawServerSocket { | 5 @patch class RawServerSocket { |
| 6 @patch static Future<RawServerSocket> bind(address, | 6 @patch static Future<RawServerSocket> bind(address, |
| 7 int port, | 7 int port, |
| 8 {int backlog: 0, | 8 {int backlog: 0, |
| 9 bool v6Only: false, | 9 bool v6Only: false, |
| 10 bool shared: false}) { | 10 bool shared: false}) { |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 if (offset is! int || bytes is! int) { | 662 if (offset is! int || bytes is! int) { |
| 663 throw new ArgumentError("Invalid arguments to write on Socket"); | 663 throw new ArgumentError("Invalid arguments to write on Socket"); |
| 664 } | 664 } |
| 665 if (isClosing || isClosed) return 0; | 665 if (isClosing || isClosed) return 0; |
| 666 if (bytes == 0) return 0; | 666 if (bytes == 0) return 0; |
| 667 _BufferAndStart bufferAndStart = | 667 _BufferAndStart bufferAndStart = |
| 668 _ensureFastAndSerializableByteData(buffer, offset, offset + bytes); | 668 _ensureFastAndSerializableByteData(buffer, offset, offset + bytes); |
| 669 var result = | 669 var result = |
| 670 nativeWrite(bufferAndStart.buffer, bufferAndStart.start, bytes); | 670 nativeWrite(bufferAndStart.buffer, bufferAndStart.start, bytes); |
| 671 if (result is OSError) { | 671 if (result is OSError) { |
| 672 scheduleMicrotask(() => reportError(result, "Write failed")); | 672 OSError osError = result; |
| 673 scheduleMicrotask(() => reportError(osError, "Write failed")); |
| 673 result = 0; | 674 result = 0; |
| 674 } | 675 } |
| 675 // The result may be negative, if we forced a short write for testing | 676 // The result may be negative, if we forced a short write for testing |
| 676 // purpose. In such case, don't mark writeAvailable as false, as we don't | 677 // purpose. In such case, don't mark writeAvailable as false, as we don't |
| 677 // know if we'll receive an event. It's better to just retry. | 678 // know if we'll receive an event. It's better to just retry. |
| 678 if (result >= 0 && result < bytes) { | 679 if (result >= 0 && result < bytes) { |
| 679 writeAvailable = false; | 680 writeAvailable = false; |
| 680 } | 681 } |
| 681 // Negate the result, as stated above. | 682 // Negate the result, as stated above. |
| 682 if (result < 0) result = -result; | 683 if (result < 0) result = -result; |
| 683 // TODO(ricow): Remove when we track internal and pipe uses. | 684 // TODO(ricow): Remove when we track internal and pipe uses. |
| 684 assert(resourceInfo != null || isPipe || isInternal); | 685 assert(resourceInfo != null || isPipe || isInternal); |
| 685 if (resourceInfo != null) { | 686 if (resourceInfo != null) { |
| 686 resourceInfo.addWrite(result); | 687 resourceInfo.addWrite(result); |
| 687 } | 688 } |
| 688 return result; | 689 return result; |
| 689 } | 690 } |
| 690 | 691 |
| 691 int send(List<int> buffer, int offset, int bytes, | 692 int send(List<int> buffer, int offset, int bytes, |
| 692 InternetAddress address, int port) { | 693 InternetAddress address, int port) { |
| 693 _throwOnBadPort(port); | 694 _throwOnBadPort(port); |
| 694 if (isClosing || isClosed) return 0; | 695 if (isClosing || isClosed) return 0; |
| 695 _BufferAndStart bufferAndStart = | 696 _BufferAndStart bufferAndStart = |
| 696 _ensureFastAndSerializableByteData( | 697 _ensureFastAndSerializableByteData( |
| 697 buffer, offset, bytes); | 698 buffer, offset, bytes); |
| 698 var result = nativeSendTo( | 699 var result = nativeSendTo( |
| 699 bufferAndStart.buffer, bufferAndStart.start, bytes, | 700 bufferAndStart.buffer, bufferAndStart.start, bytes, |
| 700 address._in_addr, port); | 701 address._in_addr, port); |
| 701 if (result is OSError) { | 702 if (result is OSError) { |
| 702 scheduleMicrotask(() => reportError(result, "Send failed")); | 703 OSError osError = result; |
| 704 scheduleMicrotask(() => reportError(osError, "Send failed")); |
| 703 result = 0; | 705 result = 0; |
| 704 } | 706 } |
| 705 // TODO(ricow): Remove when we track internal and pipe uses. | 707 // TODO(ricow): Remove when we track internal and pipe uses. |
| 706 assert(resourceInfo != null || isPipe || isInternal); | 708 assert(resourceInfo != null || isPipe || isInternal); |
| 707 if (resourceInfo != null) { | 709 if (resourceInfo != null) { |
| 708 resourceInfo.addWrite(result); | 710 resourceInfo.addWrite(result); |
| 709 } | 711 } |
| 710 return result; | 712 return result; |
| 711 } | 713 } |
| 712 | 714 |
| (...skipping 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1877 Datagram _makeDatagram(List<int> data, | 1879 Datagram _makeDatagram(List<int> data, |
| 1878 String address, | 1880 String address, |
| 1879 List<int> in_addr, | 1881 List<int> in_addr, |
| 1880 int port) { | 1882 int port) { |
| 1881 return new Datagram( | 1883 return new Datagram( |
| 1882 data, | 1884 data, |
| 1883 new _InternetAddress(address, null, in_addr), | 1885 new _InternetAddress(address, null, in_addr), |
| 1884 port); | 1886 port); |
| 1885 } | 1887 } |
| 1886 | 1888 |
| OLD | NEW |