OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <stdlib.h> | 8 #include <stdlib.h> |
9 #include <string.h> | 9 #include <string.h> |
10 | 10 |
11 #include <algorithm> | 11 #include <algorithm> |
12 #include <string> | 12 #include <string> |
13 | 13 |
14 #include "native_client/src/include/nacl_scoped_ptr.h" | 14 #include "native_client/src/include/nacl_scoped_ptr.h" |
15 #include "native_client/src/include/portability_sockets.h" | 15 #include "native_client/src/include/portability_sockets.h" |
16 #include "native_client/src/shared/platform/nacl_log.h" | 16 #include "native_client/src/shared/platform/nacl_log.h" |
17 #include "native_client/src/trusted/debug_stub/platform.h" | 17 #include "native_client/src/trusted/debug_stub/platform.h" |
18 #include "native_client/src/trusted/debug_stub/transport.h" | 18 #include "native_client/src/trusted/debug_stub/transport.h" |
19 #include "native_client/src/trusted/debug_stub/util.h" | 19 #include "native_client/src/trusted/debug_stub/util.h" |
20 #include "native_client/src/trusted/service_runtime/sel_ldr.h" | 20 #include "native_client/src/trusted/service_runtime/sel_ldr.h" |
21 | 21 |
22 using gdb_rsp::stringvec; | 22 using gdb_rsp::stringvec; |
23 using gdb_rsp::StringSplit; | 23 using gdb_rsp::StringSplit; |
24 | 24 |
| 25 #if NACL_WINDOWS |
| 26 typedef int socklen_t; |
| 27 #endif |
| 28 |
25 namespace port { | 29 namespace port { |
26 | 30 |
27 typedef int socklen_t; | |
28 | |
29 class Transport : public ITransport { | 31 class Transport : public ITransport { |
30 public: | 32 public: |
31 Transport() | 33 Transport() |
32 : buf_(new char[kBufSize]), | 34 : buf_(new char[kBufSize]), |
33 pos_(0), | 35 pos_(0), |
34 size_(0) { | 36 size_(0) { |
35 handle_ = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | 37 handle_ = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); |
36 #if NACL_WINDOWS | 38 #if NACL_WINDOWS |
37 CreateSocketEvent(); | 39 CreateSocketEvent(); |
38 #endif | 40 #endif |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 if (setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, | 418 if (setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, |
417 reinterpret_cast<char *>(&nodelay), | 419 reinterpret_cast<char *>(&nodelay), |
418 sizeof(nodelay))) { | 420 sizeof(nodelay))) { |
419 NaClLog(LOG_WARNING, "Failed to set TCP_NODELAY option.\n"); | 421 NaClLog(LOG_WARNING, "Failed to set TCP_NODELAY option.\n"); |
420 } | 422 } |
421 return new Transport(socket); | 423 return new Transport(socket); |
422 } | 424 } |
423 return NULL; | 425 return NULL; |
424 } | 426 } |
425 | 427 |
| 428 uint16_t SocketBinding::GetBoundPort() { |
| 429 struct sockaddr_in saddr; |
| 430 struct sockaddr *psaddr = reinterpret_cast<struct sockaddr *>(&saddr); |
| 431 // Clearing sockaddr_in first appears to be necessary on Mac OS X. |
| 432 memset(&saddr, 0, sizeof(saddr)); |
| 433 socklen_t addrlen = static_cast<socklen_t>(sizeof(saddr)); |
| 434 if (::getsockname(socket_handle_, psaddr, &addrlen)) { |
| 435 NaClLog(LOG_ERROR, "Failed to retrieve bound address.\n"); |
| 436 return 0; |
| 437 } |
| 438 return ntohs(saddr.sin_port); |
| 439 } |
| 440 |
426 } // namespace port | 441 } // namespace port |
OLD | NEW |