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

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

Issue 2523133002: Fuchsia sockets: (Closed)
Patch Set: Enable NODELAY Created 4 years, 1 month 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
« no previous file with comments | « no previous file | runtime/tests/vm/dart/hello_fuchsia_test.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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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_FUCHSIA) 8 #if defined(TARGET_OS_FUCHSIA)
9 9
10 #include "bin/socket.h" 10 #include "bin/socket.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 LOG_INFO("Create: socket(SOCK_STREAM) -> fd %ld\n", fd); 88 LOG_INFO("Create: socket(SOCK_STREAM) -> fd %ld\n", fd);
89 if (!FDUtils::SetCloseOnExec(fd)) { 89 if (!FDUtils::SetCloseOnExec(fd)) {
90 LOG_ERR("Create: FDUtils::SetCloseOnExec(%ld) failed\n", fd); 90 LOG_ERR("Create: FDUtils::SetCloseOnExec(%ld) failed\n", fd);
91 FDUtils::SaveErrorAndClose(fd); 91 FDUtils::SaveErrorAndClose(fd);
92 return -1; 92 return -1;
93 } 93 }
94 return fd; 94 return fd;
95 } 95 }
96 96
97 97
98 static intptr_t CheckConnect(intptr_t fd) {
99 int val;
100 socklen_t vallen = sizeof(val);
101 LOG_INFO("CheckConnect: calling getsockopt(%ld)\n", fd);
102 intptr_t result = getsockopt(fd, SOL_SOCKET, SO_ERROR, &val, &vallen);
103 if (result != 0) {
104 FATAL1("CheckConnect: getsockopt(%ld) failed\n", fd);
105 } else if (vallen != sizeof(val)) {
106 FATAL1("CheckConnect: getsockopt(%ld) vallen != sizeof(val)!?!?\n", fd);
107 } else if (val != 0) {
108 LOG_ERR("CheckConnect: getsockopt(%ld) val = %d\n", fd, val);
109 return val;
110 }
111 LOG_INFO("CheckConnect: getsockopt(%ld) connected\n", fd);
112 return 0;
113 }
114
115
116 static intptr_t Connect(intptr_t fd, const RawAddr& addr) { 98 static intptr_t Connect(intptr_t fd, const RawAddr& addr) {
117 LOG_INFO("Connect: calling connect(%ld)\n", fd); 99 LOG_INFO("Connect: calling connect(%ld)\n", fd);
118 intptr_t result = NO_RETRY_EXPECTED( 100 intptr_t result = NO_RETRY_EXPECTED(
119 connect(fd, &addr.addr, SocketAddress::GetAddrLength(addr))); 101 connect(fd, &addr.addr, SocketAddress::GetAddrLength(addr)));
120 if ((result == 0) || (errno == EINPROGRESS)) { 102 if ((result == 0) || (errno == EINPROGRESS)) {
121 LOG_INFO("Connect: connect(%ld) succeeded\n", fd);
122 intptr_t error = 0;
123 // TODO(US-87): When the issue is resolved this check is no longer needed.
124 while ((error = CheckConnect(fd)) != 0) {
125 if (error != EINPROGRESS) {
126 errno = error;
127 FDUtils::SaveErrorAndClose(fd);
128 return -1;
129 }
130 }
131 return fd; 103 return fd;
132 } 104 }
133 LOG_ERR("Connect: connect(%ld) failed\n", fd); 105 LOG_ERR("Connect: connect(%ld) failed\n", fd);
134 FDUtils::SaveErrorAndClose(fd); 106 FDUtils::SaveErrorAndClose(fd);
135 return -1; 107 return -1;
136 } 108 }
137 109
138 110
139 intptr_t Socket::CreateConnect(const RawAddr& addr) { 111 intptr_t Socket::CreateConnect(const RawAddr& addr) {
140 intptr_t fd = Create(addr); 112 intptr_t fd = Create(addr);
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 454
483 455
484 bool Socket::GetNoDelay(intptr_t fd, bool* enabled) { 456 bool Socket::GetNoDelay(intptr_t fd, bool* enabled) {
485 LOG_ERR("Socket::GetNoDelay is unimplemented\n"); 457 LOG_ERR("Socket::GetNoDelay is unimplemented\n");
486 UNIMPLEMENTED(); 458 UNIMPLEMENTED();
487 return false; 459 return false;
488 } 460 }
489 461
490 462
491 bool Socket::SetNoDelay(intptr_t fd, bool enabled) { 463 bool Socket::SetNoDelay(intptr_t fd, bool enabled) {
492 // TODO(US-94): Enable.
493 #if 0
494 int on = enabled ? 1 : 0; 464 int on = enabled ? 1 : 0;
495 return NO_RETRY_EXPECTED(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, 465 return NO_RETRY_EXPECTED(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY,
496 reinterpret_cast<char*>(&on), 466 reinterpret_cast<char*>(&on),
497 sizeof(on))) == 0; 467 sizeof(on))) == 0;
498 #else
499 return true;
500 #endif
501 } 468 }
502 469
503 470
504 bool Socket::GetMulticastLoop(intptr_t fd, intptr_t protocol, bool* enabled) { 471 bool Socket::GetMulticastLoop(intptr_t fd, intptr_t protocol, bool* enabled) {
505 LOG_ERR("Socket::GetMulticastLoop is unimplemented\n"); 472 LOG_ERR("Socket::GetMulticastLoop is unimplemented\n");
506 UNIMPLEMENTED(); 473 UNIMPLEMENTED();
507 return false; 474 return false;
508 } 475 }
509 476
510 477
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 UNIMPLEMENTED(); 528 UNIMPLEMENTED();
562 return false; 529 return false;
563 } 530 }
564 531
565 } // namespace bin 532 } // namespace bin
566 } // namespace dart 533 } // namespace dart
567 534
568 #endif // defined(TARGET_OS_FUCHSIA) 535 #endif // defined(TARGET_OS_FUCHSIA)
569 536
570 #endif // !defined(DART_IO_DISABLED) 537 #endif // !defined(DART_IO_DISABLED)
OLDNEW
« no previous file with comments | « no previous file | runtime/tests/vm/dart/hello_fuchsia_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698