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 return _RawServerSocket.bind(address, port, backlog, v6Only); | 10 return _RawServerSocket.bind(address, port, backlog, v6Only); |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 static const int FIRST_EVENT = READ_EVENT; | 231 static const int FIRST_EVENT = READ_EVENT; |
232 static const int LAST_EVENT = DESTROYED_EVENT; | 232 static const int LAST_EVENT = DESTROYED_EVENT; |
233 static const int EVENT_COUNT = LAST_EVENT - FIRST_EVENT + 1; | 233 static const int EVENT_COUNT = LAST_EVENT - FIRST_EVENT + 1; |
234 | 234 |
235 static const int CLOSE_COMMAND = 8; | 235 static const int CLOSE_COMMAND = 8; |
236 static const int SHUTDOWN_READ_COMMAND = 9; | 236 static const int SHUTDOWN_READ_COMMAND = 9; |
237 static const int SHUTDOWN_WRITE_COMMAND = 10; | 237 static const int SHUTDOWN_WRITE_COMMAND = 10; |
238 // The lower bits of RETURN_TOKEN_COMMAND messages contains the number | 238 // The lower bits of RETURN_TOKEN_COMMAND messages contains the number |
239 // of tokens returned. | 239 // of tokens returned. |
240 static const int RETURN_TOKEN_COMMAND = 11; | 240 static const int RETURN_TOKEN_COMMAND = 11; |
| 241 static const int SET_EVENT_MASK_COMMAND = 12; |
241 static const int FIRST_COMMAND = CLOSE_COMMAND; | 242 static const int FIRST_COMMAND = CLOSE_COMMAND; |
242 static const int LAST_COMMAND = RETURN_TOKEN_COMMAND; | 243 static const int LAST_COMMAND = SET_EVENT_MASK_COMMAND; |
243 | 244 |
244 // Type flag send to the eventhandler providing additional | 245 // Type flag send to the eventhandler providing additional |
245 // information on the type of the file descriptor. | 246 // information on the type of the file descriptor. |
246 static const int LISTENING_SOCKET = 16; | 247 static const int LISTENING_SOCKET = 16; |
247 static const int PIPE_SOCKET = 17; | 248 static const int PIPE_SOCKET = 17; |
248 static const int TYPE_NORMAL_SOCKET = 0; | 249 static const int TYPE_NORMAL_SOCKET = 0; |
249 static const int TYPE_LISTENING_SOCKET = 1 << LISTENING_SOCKET; | 250 static const int TYPE_LISTENING_SOCKET = 1 << LISTENING_SOCKET; |
250 static const int TYPE_PIPE = 1 << PIPE_SOCKET; | 251 static const int TYPE_PIPE = 1 << PIPE_SOCKET; |
251 static const int TYPE_TYPE_MASK = TYPE_LISTENING_SOCKET | PIPE_SOCKET; | 252 static const int TYPE_TYPE_MASK = TYPE_LISTENING_SOCKET | PIPE_SOCKET; |
252 | 253 |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 if (port != 0) socket.localPort = port; | 517 if (port != 0) socket.localPort = port; |
517 return socket; | 518 return socket; |
518 }); | 519 }); |
519 } | 520 } |
520 | 521 |
521 _NativeSocket.datagram(this.address) | 522 _NativeSocket.datagram(this.address) |
522 : typeFlags = TYPE_NORMAL_SOCKET | TYPE_UDP_SOCKET; | 523 : typeFlags = TYPE_NORMAL_SOCKET | TYPE_UDP_SOCKET; |
523 | 524 |
524 _NativeSocket.normal() : typeFlags = TYPE_NORMAL_SOCKET | TYPE_TCP_SOCKET; | 525 _NativeSocket.normal() : typeFlags = TYPE_NORMAL_SOCKET | TYPE_TCP_SOCKET; |
525 | 526 |
526 _NativeSocket.listen() : typeFlags = TYPE_LISTENING_SOCKET | TYPE_TCP_SOCKET; | 527 _NativeSocket.listen() : typeFlags = TYPE_LISTENING_SOCKET | TYPE_TCP_SOCKET { |
| 528 isClosedWrite = true; |
| 529 } |
527 | 530 |
528 _NativeSocket.pipe() : typeFlags = TYPE_PIPE; | 531 _NativeSocket.pipe() : typeFlags = TYPE_PIPE; |
529 | 532 |
530 _NativeSocket.watch(int id) | 533 _NativeSocket.watch(int id) |
531 : typeFlags = TYPE_NORMAL_SOCKET | TYPE_INTERNAL_SOCKET { | 534 : typeFlags = TYPE_NORMAL_SOCKET | TYPE_INTERNAL_SOCKET { |
532 isClosedWrite = true; | 535 isClosedWrite = true; |
533 nativeSetSocketId(id); | 536 nativeSetSocketId(id); |
534 } | 537 } |
535 | 538 |
536 bool get isListening => (typeFlags & TYPE_LISTENING_SOCKET) != 0; | 539 bool get isListening => (typeFlags & TYPE_LISTENING_SOCKET) != 0; |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 eventHandlers[DESTROYED_EVENT] = destroyed; | 801 eventHandlers[DESTROYED_EVENT] = destroyed; |
799 } | 802 } |
800 | 803 |
801 void setListening({read: true, write: true}) { | 804 void setListening({read: true, write: true}) { |
802 sendReadEvents = read; | 805 sendReadEvents = read; |
803 sendWriteEvents = write; | 806 sendWriteEvents = write; |
804 if (read) issueReadEvent(); | 807 if (read) issueReadEvent(); |
805 if (write) issueWriteEvent(); | 808 if (write) issueWriteEvent(); |
806 if (!flagsSent && !isClosing) { | 809 if (!flagsSent && !isClosing) { |
807 flagsSent = true; | 810 flagsSent = true; |
808 int flags = 0; | 811 int flags = 1 << SET_EVENT_MASK_COMMAND; |
809 if (!isClosedRead) flags |= 1 << READ_EVENT; | 812 if (!isClosedRead) flags |= 1 << READ_EVENT; |
810 if (!isClosedWrite) flags |= 1 << WRITE_EVENT; | 813 if (!isClosedWrite) flags |= 1 << WRITE_EVENT; |
811 sendToEventHandler(flags); | 814 sendToEventHandler(flags); |
812 } | 815 } |
813 } | 816 } |
814 | 817 |
815 Future close() { | 818 Future close() { |
816 if (!isClosing && !isClosed) { | 819 if (!isClosing && !isClosed) { |
817 sendToEventHandler(1 << CLOSE_COMMAND); | 820 sendToEventHandler(1 << CLOSE_COMMAND); |
818 isClosing = true; | 821 isClosing = true; |
(...skipping 1111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1930 String address, | 1933 String address, |
1931 List<int> in_addr, | 1934 List<int> in_addr, |
1932 int port) { | 1935 int port) { |
1933 return new Datagram( | 1936 return new Datagram( |
1934 data, | 1937 data, |
1935 new _InternetAddress(address, null, in_addr), | 1938 new _InternetAddress(address, null, in_addr), |
1936 port); | 1939 port); |
1937 } | 1940 } |
1938 | 1941 |
1939 String _socketsStats() => _SocketsObservatory.toJSON(); | 1942 String _socketsStats() => _SocketsObservatory.toJSON(); |
OLD | NEW |