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

Side by Side Diff: runtime/bin/socket.cc

Issue 910183003: Reafctor to use 'const RawAddr&' or 'RawAddr*' in the eventhandler code (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Minor change Created 5 years, 10 months 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
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 #include "bin/io_buffer.h" 5 #include "bin/io_buffer.h"
6 #include "bin/isolate_data.h" 6 #include "bin/isolate_data.h"
7 #include "bin/dartutils.h" 7 #include "bin/dartutils.h"
8 #include "bin/socket.h" 8 #include "bin/socket.h"
9 #include "bin/thread.h" 9 #include "bin/thread.h"
10 #include "bin/lockers.h" 10 #include "bin/lockers.h"
(...skipping 25 matching lines...) Expand all
36 36
37 37
38 void ListeningSocketRegistry::Cleanup() { 38 void ListeningSocketRegistry::Cleanup() {
39 delete globalTcpListeningSocketRegistry; 39 delete globalTcpListeningSocketRegistry;
40 globalTcpListeningSocketRegistry = NULL; 40 globalTcpListeningSocketRegistry = NULL;
41 } 41 }
42 42
43 43
44 Dart_Handle ListeningSocketRegistry::CreateBindListen(Dart_Handle socket_object, 44 Dart_Handle ListeningSocketRegistry::CreateBindListen(Dart_Handle socket_object,
45 RawAddr addr, 45 RawAddr addr,
46 intptr_t port,
47 intptr_t backlog, 46 intptr_t backlog,
48 bool v6_only, 47 bool v6_only,
49 bool shared) { 48 bool shared) {
50 MutexLocker ml(ListeningSocketRegistry::mutex_); 49 MutexLocker ml(ListeningSocketRegistry::mutex_);
51 50
51 intptr_t port = SocketAddress::GetAddrPort(addr);
52
52 SocketsIterator it = sockets_by_port_.find(port); 53 SocketsIterator it = sockets_by_port_.find(port);
53 OSSocket *first_os_socket = NULL; 54 OSSocket *first_os_socket = NULL;
54 if (it != sockets_by_port_.end()) { 55 if (it != sockets_by_port_.end()) {
55 first_os_socket = it->second; 56 first_os_socket = it->second;
56 } 57 }
57 58
58 if (first_os_socket != NULL) { 59 if (first_os_socket != NULL) {
59 // There is already a socket listening on this port. We need to ensure 60 // There is already a socket listening on this port. We need to ensure
60 // that if there is one also listening on the same address, it was created 61 // that if there is one also listening on the same address, it was created
61 // with `shared = true`, ... 62 // with `shared = true`, ...
(...skipping 25 matching lines...) Expand all
87 os_socket->ref_count++; 88 os_socket->ref_count++;
88 89
89 // We set as a side-effect the file descriptor on the dart socket_object. 90 // We set as a side-effect the file descriptor on the dart socket_object.
90 Socket::SetSocketIdNativeField(socket_object, os_socket->socketfd); 91 Socket::SetSocketIdNativeField(socket_object, os_socket->socketfd);
91 92
92 return Dart_True(); 93 return Dart_True();
93 } 94 }
94 } 95 }
95 96
96 // There is no socket listening on that (address, port), so we create new one. 97 // There is no socket listening on that (address, port), so we create new one.
97 intptr_t socketfd = ServerSocket::CreateBindListen( 98 intptr_t socketfd = ServerSocket::CreateBindListen(addr, backlog, v6_only);
98 addr, port, backlog, v6_only);
99 if (socketfd == -5) { 99 if (socketfd == -5) {
100 OSError os_error(-1, "Invalid host", OSError::kUnknown); 100 OSError os_error(-1, "Invalid host", OSError::kUnknown);
101 return DartUtils::NewDartOSError(&os_error); 101 return DartUtils::NewDartOSError(&os_error);
102 } 102 }
103 if (socketfd < 0) { 103 if (socketfd < 0) {
104 OSError error; 104 OSError error;
105 return DartUtils::NewDartOSError(&error); 105 return DartUtils::NewDartOSError(&error);
106 } 106 }
107 if (!ServerSocket::StartAccept(socketfd)) { 107 if (!ServerSocket::StartAccept(socketfd)) {
108 OSError os_error(-1, "Failed to start accept", OSError::kUnknown); 108 OSError os_error(-1, "Failed to start accept", OSError::kUnknown);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 : SocketAddress::TYPE_IPV6; 194 : SocketAddress::TYPE_IPV6;
195 if (type == SocketAddress::TYPE_IPV4) { 195 if (type == SocketAddress::TYPE_IPV4) {
196 raw.addr.sa_family = AF_INET; 196 raw.addr.sa_family = AF_INET;
197 } else { 197 } else {
198 raw.addr.sa_family = AF_INET6; 198 raw.addr.sa_family = AF_INET6;
199 } 199 }
200 bool ok = Socket::ParseAddress(type, address, &raw); 200 bool ok = Socket::ParseAddress(type, address, &raw);
201 if (!ok) { 201 if (!ok) {
202 Dart_SetReturnValue(args, Dart_Null()); 202 Dart_SetReturnValue(args, Dart_Null());
203 } else { 203 } else {
204 Dart_SetReturnValue(args, SocketAddress::ToTypedData(&raw)); 204 Dart_SetReturnValue(args, SocketAddress::ToTypedData(raw));
205 } 205 }
206 } 206 }
207 207
208 208
209 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { 209 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) {
210 RawAddr addr; 210 RawAddr addr;
211 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); 211 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
212 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); 212 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2);
213 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); 213 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535);
214 intptr_t socket = Socket::CreateConnect(addr, static_cast<intptr_t>(port)); 214 SocketAddress::SetAddrPort(&addr, static_cast<intptr_t>(port));
215 intptr_t socket = Socket::CreateConnect(addr);
215 OSError error; 216 OSError error;
216 if (socket >= 0) { 217 if (socket >= 0) {
217 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); 218 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket);
218 Dart_SetReturnValue(args, Dart_True()); 219 Dart_SetReturnValue(args, Dart_True());
219 } else { 220 } else {
220 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); 221 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
221 } 222 }
222 } 223 }
223 224
224 225
225 void FUNCTION_NAME(Socket_CreateBindConnect)(Dart_NativeArguments args) { 226 void FUNCTION_NAME(Socket_CreateBindConnect)(Dart_NativeArguments args) {
226 RawAddr addr; 227 RawAddr addr;
227 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); 228 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
228 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); 229 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2);
229 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); 230 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535);
231 SocketAddress::SetAddrPort(&addr, static_cast<intptr_t>(port));
230 RawAddr sourceAddr; 232 RawAddr sourceAddr;
231 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 3), &sourceAddr); 233 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 3), &sourceAddr);
232 intptr_t socket = Socket::CreateBindConnect( 234 intptr_t socket = Socket::CreateBindConnect(addr, sourceAddr);
233 addr, static_cast<intptr_t>(port), sourceAddr);
234 OSError error; 235 OSError error;
235 if (socket >= 0) { 236 if (socket >= 0) {
236 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); 237 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket);
237 Dart_SetReturnValue(args, Dart_True()); 238 Dart_SetReturnValue(args, Dart_True());
238 } else { 239 } else {
239 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); 240 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
240 } 241 }
241 } 242 }
242 243
243 244
244 void FUNCTION_NAME(Socket_CreateBindDatagram)(Dart_NativeArguments args) { 245 void FUNCTION_NAME(Socket_CreateBindDatagram)(Dart_NativeArguments args) {
245 RawAddr addr; 246 RawAddr addr;
246 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); 247 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
247 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2); 248 Dart_Handle port_arg = Dart_GetNativeArgument(args, 2);
248 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535); 249 int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535);
250 SocketAddress::SetAddrPort(&addr, port);
249 bool reuse_addr = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3)); 251 bool reuse_addr = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3));
250 intptr_t socket = Socket::CreateBindDatagram(&addr, 252 intptr_t socket = Socket::CreateBindDatagram(addr, reuse_addr);
251 static_cast<intptr_t>(port),
252 reuse_addr);
253 if (socket >= 0) { 253 if (socket >= 0) {
254 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket); 254 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket);
255 Dart_SetReturnValue(args, Dart_True()); 255 Dart_SetReturnValue(args, Dart_True());
256 } else { 256 } else {
257 OSError error; 257 OSError error;
258 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); 258 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
259 } 259 }
260 } 260 }
261 261
262 262
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 } 340 }
341 // Datagram data read. Copy into buffer of the exact size, 341 // Datagram data read. Copy into buffer of the exact size,
342 ASSERT(bytes_read > 0); 342 ASSERT(bytes_read > 0);
343 uint8_t* data_buffer = NULL; 343 uint8_t* data_buffer = NULL;
344 Dart_Handle data = IOBuffer::Allocate(bytes_read, &data_buffer); 344 Dart_Handle data = IOBuffer::Allocate(bytes_read, &data_buffer);
345 if (Dart_IsError(data)) Dart_PropagateError(data); 345 if (Dart_IsError(data)) Dart_PropagateError(data);
346 ASSERT(data_buffer != NULL); 346 ASSERT(data_buffer != NULL);
347 memmove(data_buffer, isolate_data->udp_receive_buffer, bytes_read); 347 memmove(data_buffer, isolate_data->udp_receive_buffer, bytes_read);
348 348
349 // Get the port and clear it in the sockaddr structure. 349 // Get the port and clear it in the sockaddr structure.
350 int port = SocketAddress::GetAddrPort(&addr); 350 int port = SocketAddress::GetAddrPort(addr);
351 if (addr.addr.sa_family == AF_INET) { 351 if (addr.addr.sa_family == AF_INET) {
352 addr.in.sin_port = 0; 352 addr.in.sin_port = 0;
353 } else { 353 } else {
354 ASSERT(addr.addr.sa_family == AF_INET6); 354 ASSERT(addr.addr.sa_family == AF_INET6);
355 addr.in6.sin6_port = 0; 355 addr.in6.sin6_port = 0;
356 } 356 }
357 // Format the address to a string using the numeric format. 357 // Format the address to a string using the numeric format.
358 char numeric_address[INET6_ADDRSTRLEN]; 358 char numeric_address[INET6_ADDRSTRLEN];
359 Socket::FormatNumericAddress(&addr, numeric_address, INET6_ADDRSTRLEN); 359 Socket::FormatNumericAddress(addr, numeric_address, INET6_ADDRSTRLEN);
360 360
361 // Create a Datagram object with the data and sender address and port. 361 // Create a Datagram object with the data and sender address and port.
362 const int kNumArgs = 4; 362 const int kNumArgs = 4;
363 Dart_Handle dart_args[kNumArgs]; 363 Dart_Handle dart_args[kNumArgs];
364 dart_args[0] = data; 364 dart_args[0] = data;
365 dart_args[1] = Dart_NewStringFromCString(numeric_address); 365 dart_args[1] = Dart_NewStringFromCString(numeric_address);
366 if (Dart_IsError(dart_args[1])) Dart_PropagateError(dart_args[1]); 366 if (Dart_IsError(dart_args[1])) Dart_PropagateError(dart_args[1]);
367 dart_args[2] = SocketAddress::ToTypedData(&addr); 367 dart_args[2] = SocketAddress::ToTypedData(addr);
368 dart_args[3] = Dart_NewInteger(port); 368 dart_args[3] = Dart_NewInteger(port);
369 if (Dart_IsError(dart_args[3])) Dart_PropagateError(dart_args[3]); 369 if (Dart_IsError(dart_args[3])) Dart_PropagateError(dart_args[3]);
370 // TODO(sgjesse): Cache the _makeDatagram function somewhere. 370 // TODO(sgjesse): Cache the _makeDatagram function somewhere.
371 Dart_Handle io_lib = 371 Dart_Handle io_lib =
372 Dart_LookupLibrary(DartUtils::NewString("dart:io")); 372 Dart_LookupLibrary(DartUtils::NewString("dart:io"));
373 if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib); 373 if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib);
374 Dart_Handle result = 374 Dart_Handle result =
375 Dart_Invoke(io_lib, 375 Dart_Invoke(io_lib,
376 DartUtils::NewString("_makeDatagram"), 376 DartUtils::NewString("_makeDatagram"),
377 kNumArgs, 377 kNumArgs,
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 intptr_t port = 0; 481 intptr_t port = 0;
482 SocketAddress* addr = Socket::GetRemotePeer(socket, &port); 482 SocketAddress* addr = Socket::GetRemotePeer(socket, &port);
483 if (addr != NULL) { 483 if (addr != NULL) {
484 Dart_Handle list = Dart_NewList(2); 484 Dart_Handle list = Dart_NewList(2);
485 485
486 Dart_Handle entry = Dart_NewList(3); 486 Dart_Handle entry = Dart_NewList(3);
487 Dart_ListSetAt(entry, 0, Dart_NewInteger(addr->GetType())); 487 Dart_ListSetAt(entry, 0, Dart_NewInteger(addr->GetType()));
488 Dart_ListSetAt(entry, 1, Dart_NewStringFromCString(addr->as_string())); 488 Dart_ListSetAt(entry, 1, Dart_NewStringFromCString(addr->as_string()));
489 489
490 RawAddr raw = addr->addr(); 490 RawAddr raw = addr->addr();
491 intptr_t data_length = SocketAddress::GetAddrLength(&raw); 491 intptr_t data_length = SocketAddress::GetAddrLength(raw);
492 Dart_Handle data = Dart_NewTypedData(Dart_TypedData_kUint8, data_length); 492 Dart_Handle data = Dart_NewTypedData(Dart_TypedData_kUint8, data_length);
493 Dart_ListSetAsBytes(data, 0, reinterpret_cast<uint8_t*>(&raw), data_length); 493 Dart_ListSetAsBytes(data, 0, reinterpret_cast<uint8_t*>(&raw), data_length);
494 Dart_ListSetAt(entry, 2, data); 494 Dart_ListSetAt(entry, 2, data);
495 495
496 Dart_ListSetAt(list, 0, entry); 496 Dart_ListSetAt(list, 0, entry);
497 Dart_ListSetAt(list, 1, Dart_NewInteger(port)); 497 Dart_ListSetAt(list, 1, Dart_NewInteger(port));
498 Dart_SetReturnValue(args, list); 498 Dart_SetReturnValue(args, list);
499 delete addr; 499 delete addr;
500 } else { 500 } else {
501 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 501 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 } 548 }
549 549
550 550
551 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { 551 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) {
552 RawAddr addr; 552 RawAddr addr;
553 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); 553 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
554 int64_t port = DartUtils::GetInt64ValueCheckRange( 554 int64_t port = DartUtils::GetInt64ValueCheckRange(
555 Dart_GetNativeArgument(args, 2), 555 Dart_GetNativeArgument(args, 2),
556 0, 556 0,
557 65535); 557 65535);
558 SocketAddress::SetAddrPort(&addr, port);
558 int64_t backlog = DartUtils::GetInt64ValueCheckRange( 559 int64_t backlog = DartUtils::GetInt64ValueCheckRange(
559 Dart_GetNativeArgument(args, 3), 560 Dart_GetNativeArgument(args, 3),
560 0, 561 0,
561 65535); 562 65535);
562 bool v6_only = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 4)); 563 bool v6_only = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 4));
563 bool shared = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 5)); 564 bool shared = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 5));
564 565
565 Dart_Handle socket_object = Dart_GetNativeArgument(args, 0); 566 Dart_Handle socket_object = Dart_GetNativeArgument(args, 0);
566 Dart_Handle result = ListeningSocketRegistry::Instance()->CreateBindListen( 567 Dart_Handle result = ListeningSocketRegistry::Instance()->CreateBindListen(
567 socket_object, addr, port, backlog, v6_only, shared); 568 socket_object, addr, backlog, v6_only, shared);
568 Dart_SetReturnValue(args, result); 569 Dart_SetReturnValue(args, result);
569 } 570 }
570 571
571 572
572 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { 573 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) {
573 intptr_t socket = 574 intptr_t socket =
574 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); 575 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
575 intptr_t new_socket = ServerSocket::Accept(socket); 576 intptr_t new_socket = ServerSocket::Accept(socket);
576 if (new_socket >= 0) { 577 if (new_socket >= 0) {
577 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 1), new_socket); 578 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 1), new_socket);
(...skipping 26 matching lines...) Expand all
604 605
605 CObjectInt32* type = new CObjectInt32( 606 CObjectInt32* type = new CObjectInt32(
606 CObject::NewInt32(addr->GetType())); 607 CObject::NewInt32(addr->GetType()));
607 entry->SetAt(0, type); 608 entry->SetAt(0, type);
608 609
609 CObjectString* as_string = new CObjectString(CObject::NewString( 610 CObjectString* as_string = new CObjectString(CObject::NewString(
610 addr->as_string())); 611 addr->as_string()));
611 entry->SetAt(1, as_string); 612 entry->SetAt(1, as_string);
612 613
613 RawAddr raw = addr->addr(); 614 RawAddr raw = addr->addr();
614 CObjectUint8Array* data = SocketAddress::ToCObject(&raw); 615 CObjectUint8Array* data = SocketAddress::ToCObject(raw);
615 entry->SetAt(2, data); 616 entry->SetAt(2, data);
616 617
617 array->SetAt(i + 1, entry); 618 array->SetAt(i + 1, entry);
618 } 619 }
619 result = array; 620 result = array;
620 delete addresses; 621 delete addresses;
621 } else { 622 } else {
622 result = CObject::NewOSError(os_error); 623 result = CObject::NewOSError(os_error);
623 delete os_error; 624 delete os_error;
624 } 625 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 683
683 CObjectInt32* type = new CObjectInt32( 684 CObjectInt32* type = new CObjectInt32(
684 CObject::NewInt32(addr->GetType())); 685 CObject::NewInt32(addr->GetType()));
685 entry->SetAt(0, type); 686 entry->SetAt(0, type);
686 687
687 CObjectString* as_string = new CObjectString(CObject::NewString( 688 CObjectString* as_string = new CObjectString(CObject::NewString(
688 addr->as_string())); 689 addr->as_string()));
689 entry->SetAt(1, as_string); 690 entry->SetAt(1, as_string);
690 691
691 RawAddr raw = addr->addr(); 692 RawAddr raw = addr->addr();
692 CObjectUint8Array* data = SocketAddress::ToCObject(&raw); 693 CObjectUint8Array* data = SocketAddress::ToCObject(raw);
693 entry->SetAt(2, data); 694 entry->SetAt(2, data);
694 695
695 CObjectString* interface_name = new CObjectString(CObject::NewString( 696 CObjectString* interface_name = new CObjectString(CObject::NewString(
696 interface->interface_name())); 697 interface->interface_name()));
697 entry->SetAt(3, interface_name); 698 entry->SetAt(3, interface_name);
698 699
699 CObjectInt64* interface_index = new CObjectInt64(CObject::NewInt64( 700 CObjectInt64* interface_index = new CObjectInt64(CObject::NewInt64(
700 interface->interface_index())); 701 interface->interface_index()));
701 entry->SetAt(4, interface_index); 702 entry->SetAt(4, interface_index);
702 703
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 intptr_t socket = 821 intptr_t socket =
821 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); 822 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
822 RawAddr addr; 823 RawAddr addr;
823 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); 824 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
824 RawAddr interface; 825 RawAddr interface;
825 if (Dart_GetNativeArgument(args, 2) != Dart_Null()) { 826 if (Dart_GetNativeArgument(args, 2) != Dart_Null()) {
826 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 2), &interface); 827 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 2), &interface);
827 } 828 }
828 int interfaceIndex = 829 int interfaceIndex =
829 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); 830 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3));
830 if (Socket::JoinMulticast(socket, &addr, &interface, interfaceIndex)) { 831 if (Socket::JoinMulticast(socket, addr, interface, interfaceIndex)) {
831 Dart_SetReturnValue(args, Dart_Null()); 832 Dart_SetReturnValue(args, Dart_Null());
832 } else { 833 } else {
833 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 834 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
834 } 835 }
835 } 836 }
836 837
837 838
838 void FUNCTION_NAME(Socket_LeaveMulticast)(Dart_NativeArguments args) { 839 void FUNCTION_NAME(Socket_LeaveMulticast)(Dart_NativeArguments args) {
839 intptr_t socket = 840 intptr_t socket =
840 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); 841 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
841 RawAddr addr; 842 RawAddr addr;
842 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr); 843 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
843 RawAddr interface; 844 RawAddr interface;
844 if (Dart_GetNativeArgument(args, 2) != Dart_Null()) { 845 if (Dart_GetNativeArgument(args, 2) != Dart_Null()) {
845 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 2), &interface); 846 SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 2), &interface);
846 } 847 }
847 int interfaceIndex = 848 int interfaceIndex =
848 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); 849 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3));
849 if (Socket::LeaveMulticast(socket, &addr, &interface, interfaceIndex)) { 850 if (Socket::LeaveMulticast(socket, addr, interface, interfaceIndex)) {
850 Dart_SetReturnValue(args, Dart_Null()); 851 Dart_SetReturnValue(args, Dart_Null());
851 } else { 852 } else {
852 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 853 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
853 } 854 }
854 } 855 }
855 856
856 857
857 void FUNCTION_NAME(Socket_MarkSocketAsSharedHack)(Dart_NativeArguments args) { 858 void FUNCTION_NAME(Socket_MarkSocketAsSharedHack)(Dart_NativeArguments args) {
858 intptr_t socketfd = 859 intptr_t socketfd =
859 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); 860 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
(...skipping 13 matching lines...) Expand all
873 intptr_t Socket::GetSocketIdNativeField(Dart_Handle socket_obj) { 874 intptr_t Socket::GetSocketIdNativeField(Dart_Handle socket_obj) {
874 intptr_t socket = 0; 875 intptr_t socket = 0;
875 Dart_Handle err = 876 Dart_Handle err =
876 Dart_GetNativeInstanceField(socket_obj, kSocketIdNativeField, &socket); 877 Dart_GetNativeInstanceField(socket_obj, kSocketIdNativeField, &socket);
877 if (Dart_IsError(err)) Dart_PropagateError(err); 878 if (Dart_IsError(err)) Dart_PropagateError(err);
878 return socket; 879 return socket;
879 } 880 }
880 881
881 } // namespace bin 882 } // namespace bin
882 } // namespace dart 883 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/socket.h ('k') | runtime/bin/socket_android.cc » ('j') | runtime/bin/socket_linux.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698