OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "nacl_io/ossocket.h" | 5 #include "nacl_io/ossocket.h" |
6 #ifdef PROVIDES_SOCKET_API | 6 #ifdef PROVIDES_SOCKET_API |
7 | 7 |
8 #include <assert.h> | 8 #include <assert.h> |
9 #include <errno.h> | 9 #include <errno.h> |
10 #include <string.h> | 10 #include <string.h> |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 | 311 |
312 void TcpNode::SetError_Locked(int pp_error_num) { | 312 void TcpNode::SetError_Locked(int pp_error_num) { |
313 SocketNode::SetError_Locked(pp_error_num); | 313 SocketNode::SetError_Locked(pp_error_num); |
314 emitter_->SetError_Locked(); | 314 emitter_->SetError_Locked(); |
315 } | 315 } |
316 | 316 |
317 Error TcpNode::GetSockOpt(int lvl, int optname, void* optval, socklen_t* len) { | 317 Error TcpNode::GetSockOpt(int lvl, int optname, void* optval, socklen_t* len) { |
318 if (lvl == IPPROTO_TCP && optname == TCP_NODELAY) { | 318 if (lvl == IPPROTO_TCP && optname == TCP_NODELAY) { |
319 AUTO_LOCK(node_lock_); | 319 AUTO_LOCK(node_lock_); |
320 int value = tcp_nodelay_; | 320 int value = tcp_nodelay_; |
321 socklen_t value_len = sizeof(value); | 321 socklen_t value_len = static_cast<socklen_t>(sizeof(value)); |
322 int copy_bytes = std::min(value_len, *len); | 322 int copy_bytes = std::min(value_len, *len); |
323 memcpy(optval, &value, copy_bytes); | 323 memcpy(optval, &value, copy_bytes); |
324 *len = value_len; | 324 *len = value_len; |
325 return 0; | 325 return 0; |
326 } | 326 } |
327 | 327 |
328 return SocketNode::GetSockOpt(lvl, optname, optval, len); | 328 return SocketNode::GetSockOpt(lvl, optname, optval, len); |
329 } | 329 } |
330 | 330 |
331 Error TcpNode::SetNoDelay_Locked() { | 331 Error TcpNode::SetNoDelay_Locked() { |
332 if (!IsConnected()) | 332 if (!IsConnected()) |
333 return 0; | 333 return 0; |
334 | 334 |
335 int32_t error = | 335 int32_t error = |
336 TCPInterface()->SetOption(socket_resource_, | 336 TCPInterface()->SetOption(socket_resource_, |
337 PP_TCPSOCKET_OPTION_NO_DELAY, | 337 PP_TCPSOCKET_OPTION_NO_DELAY, |
338 PP_MakeBool(tcp_nodelay_ ? PP_TRUE : PP_FALSE), | 338 PP_MakeBool(tcp_nodelay_ ? PP_TRUE : PP_FALSE), |
339 PP_BlockUntilComplete()); | 339 PP_BlockUntilComplete()); |
340 return PPErrorToErrno(error); | 340 return PPErrorToErrno(error); |
341 } | 341 } |
342 | 342 |
343 Error TcpNode::SetSockOpt(int lvl, | 343 Error TcpNode::SetSockOpt(int lvl, |
344 int optname, | 344 int optname, |
345 const void* optval, | 345 const void* optval, |
346 socklen_t len) { | 346 socklen_t len) { |
347 if (lvl == IPPROTO_TCP && optname == TCP_NODELAY) { | 347 if (lvl == IPPROTO_TCP && optname == TCP_NODELAY) { |
348 if (len < sizeof(int)) | 348 if (static_cast<size_t>(len) < sizeof(int)) |
349 return EINVAL; | 349 return EINVAL; |
350 AUTO_LOCK(node_lock_); | 350 AUTO_LOCK(node_lock_); |
351 tcp_nodelay_ = *static_cast<const int*>(optval) != 0; | 351 tcp_nodelay_ = *static_cast<const int*>(optval) != 0; |
352 return SetNoDelay_Locked(); | 352 return SetNoDelay_Locked(); |
353 } | 353 } |
354 | 354 |
355 return SocketNode::SetSockOpt(lvl, optname, optval, len); | 355 return SocketNode::SetSockOpt(lvl, optname, optval, len); |
356 } | 356 } |
357 | 357 |
358 void TcpNode::QueueAccept() { | 358 void TcpNode::QueueAccept() { |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 assert(emitter_.get()); | 548 assert(emitter_.get()); |
549 if (emitter_->GetError_Locked()) | 549 if (emitter_->GetError_Locked()) |
550 return EPIPE; | 550 return EPIPE; |
551 *out_len = emitter_->WriteOut_Locked((char*)buf, len); | 551 *out_len = emitter_->WriteOut_Locked((char*)buf, len); |
552 return 0; | 552 return 0; |
553 } | 553 } |
554 | 554 |
555 } // namespace nacl_io | 555 } // namespace nacl_io |
556 | 556 |
557 #endif // PROVIDES_SOCKET_API | 557 #endif // PROVIDES_SOCKET_API |
OLD | NEW |