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 #if !defined(DART_IO_DISABLED) | 5 #if !defined(DART_IO_DISABLED) |
6 | 6 |
7 #include "platform/globals.h" | 7 #include "platform/globals.h" |
8 #if defined(TARGET_OS_MACOS) | 8 #if defined(TARGET_OS_MACOS) |
9 | 9 |
10 #include "bin/socket.h" | 10 #include "bin/socket.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 } | 51 } |
52 | 52 |
53 | 53 |
54 static intptr_t Create(const RawAddr& addr) { | 54 static intptr_t Create(const RawAddr& addr) { |
55 intptr_t fd; | 55 intptr_t fd; |
56 fd = NO_RETRY_EXPECTED(socket(addr.ss.ss_family, SOCK_STREAM, 0)); | 56 fd = NO_RETRY_EXPECTED(socket(addr.ss.ss_family, SOCK_STREAM, 0)); |
57 if (fd < 0) { | 57 if (fd < 0) { |
58 return -1; | 58 return -1; |
59 } | 59 } |
60 FDUtils::SetCloseOnExec(fd); | 60 FDUtils::SetCloseOnExec(fd); |
| 61 FDUtils::SetNonBlocking(fd); |
61 return fd; | 62 return fd; |
62 } | 63 } |
63 | 64 |
64 | 65 |
65 static intptr_t Connect(intptr_t fd, const RawAddr& addr) { | 66 static intptr_t Connect(intptr_t fd, const RawAddr& addr) { |
66 intptr_t result = TEMP_FAILURE_RETRY( | 67 intptr_t result = TEMP_FAILURE_RETRY( |
67 connect(fd, &addr.addr, SocketAddress::GetAddrLength(addr))); | 68 connect(fd, &addr.addr, SocketAddress::GetAddrLength(addr))); |
68 if ((result == 0) || (errno == EINPROGRESS)) { | 69 if ((result == 0) || (errno == EINPROGRESS)) { |
69 return fd; | 70 return fd; |
70 } | 71 } |
71 VOID_TEMP_FAILURE_RETRY(close(fd)); | 72 VOID_TEMP_FAILURE_RETRY(close(fd)); |
72 return -1; | 73 return -1; |
73 } | 74 } |
74 | 75 |
75 | 76 |
76 intptr_t Socket::CreateConnect(const RawAddr& addr) { | 77 intptr_t Socket::CreateConnect(const RawAddr& addr) { |
77 intptr_t fd = Create(addr); | 78 intptr_t fd = Create(addr); |
78 if (fd < 0) { | 79 if (fd < 0) { |
79 return fd; | 80 return fd; |
80 } | 81 } |
81 | 82 |
82 FDUtils::SetNonBlocking(fd); | |
83 | |
84 return Connect(fd, addr); | 83 return Connect(fd, addr); |
85 } | 84 } |
86 | 85 |
87 | 86 |
88 intptr_t Socket::CreateBindConnect(const RawAddr& addr, | 87 intptr_t Socket::CreateBindConnect(const RawAddr& addr, |
89 const RawAddr& source_addr) { | 88 const RawAddr& source_addr) { |
90 intptr_t fd = Create(addr); | 89 intptr_t fd = Create(addr); |
91 if (fd < 0) { | 90 if (fd < 0) { |
92 return fd; | 91 return fd; |
93 } | 92 } |
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 int interfaceIndex) { | 630 int interfaceIndex) { |
632 return JoinOrLeaveMulticast(fd, addr, interface, interfaceIndex, false); | 631 return JoinOrLeaveMulticast(fd, addr, interface, interfaceIndex, false); |
633 } | 632 } |
634 | 633 |
635 } // namespace bin | 634 } // namespace bin |
636 } // namespace dart | 635 } // namespace dart |
637 | 636 |
638 #endif // defined(TARGET_OS_MACOS) | 637 #endif // defined(TARGET_OS_MACOS) |
639 | 638 |
640 #endif // !defined(DART_IO_DISABLED) | 639 #endif // !defined(DART_IO_DISABLED) |
OLD | NEW |