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

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

Issue 25511002: Add reusePort argument to ServerSocket. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Mac os X version. Created 7 years, 2 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
« no previous file with comments | « runtime/bin/socket_patch.dart ('k') | sdk/lib/io/socket.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "platform/globals.h" 5 #include "platform/globals.h"
6 #if defined(TARGET_OS_WINDOWS) 6 #if defined(TARGET_OS_WINDOWS)
7 7
8 #include "bin/builtin.h" 8 #include "bin/builtin.h"
9 #include "bin/eventhandler.h" 9 #include "bin/eventhandler.h"
10 #include "bin/file.h" 10 #include "bin/file.h"
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 } 330 }
331 } 331 }
332 free(addrs); 332 free(addrs);
333 return addresses; 333 return addresses;
334 } 334 }
335 335
336 336
337 intptr_t ServerSocket::CreateBindListen(RawAddr addr, 337 intptr_t ServerSocket::CreateBindListen(RawAddr addr,
338 intptr_t port, 338 intptr_t port,
339 intptr_t backlog, 339 intptr_t backlog,
340 bool v6_only) { 340 bool v6_only,
341 bool reuse_port) {
341 SOCKET s = socket(addr.ss.ss_family, SOCK_STREAM, IPPROTO_TCP); 342 SOCKET s = socket(addr.ss.ss_family, SOCK_STREAM, IPPROTO_TCP);
342 if (s == INVALID_SOCKET) { 343 if (s == INVALID_SOCKET) {
343 return -1; 344 return -1;
344 } 345 }
345 346
346 BOOL optval = true; 347 BOOL optval = true;
347 int status = setsockopt(s, 348 int status;
348 SOL_SOCKET, 349 if (reuse_port) {
349 SO_EXCLUSIVEADDRUSE, 350 status = setsockopt(s,
350 reinterpret_cast<const char*>(&optval), 351 SOL_SOCKET,
351 sizeof(optval)); 352 SO_REUSEADDR,
353 reinterpret_cast<const char*>(&optval),
354 sizeof(optval));
355 } else {
356 status = setsockopt(s,
357 SOL_SOCKET,
358 SO_EXCLUSIVEADDRUSE,
359 reinterpret_cast<const char*>(&optval),
360 sizeof(optval));
361 }
352 if (status == SOCKET_ERROR) { 362 if (status == SOCKET_ERROR) {
353 DWORD rc = WSAGetLastError(); 363 DWORD rc = WSAGetLastError();
354 closesocket(s); 364 closesocket(s);
355 SetLastError(rc); 365 SetLastError(rc);
356 return -1; 366 return -1;
357 } 367 }
358 368
359 if (addr.ss.ss_family == AF_INET6) { 369 if (addr.ss.ss_family == AF_INET6) {
360 optval = v6_only; 370 optval = v6_only;
361 setsockopt(s, 371 setsockopt(s,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 IPPROTO_TCP, 449 IPPROTO_TCP,
440 TCP_NODELAY, 450 TCP_NODELAY,
441 reinterpret_cast<char *>(&on), 451 reinterpret_cast<char *>(&on),
442 sizeof(on)) == 0; 452 sizeof(on)) == 0;
443 } 453 }
444 454
445 } // namespace bin 455 } // namespace bin
446 } // namespace dart 456 } // namespace dart
447 457
448 #endif // defined(TARGET_OS_WINDOWS) 458 #endif // defined(TARGET_OS_WINDOWS)
OLDNEW
« no previous file with comments | « runtime/bin/socket_patch.dart ('k') | sdk/lib/io/socket.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698