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

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/socket/unix_socketpair_node.cc

Issue 1335783005: [NaCl SDK] nacl_io: Add support for basic socketpairs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "nacl_io/ossocket.h"
6 #ifdef PROVIDES_SOCKET_API
7
8 #include <assert.h>
9 #include <string.h>
10 #include <algorithm>
11
12 #include "nacl_io/socket/unix_event_emitter.h"
13 #include "nacl_io/socket/unix_socketpair_node.h"
14
15 namespace nacl_io {
16
17 UnixSocketpairNode::UnixSocketpairNode(Filesystem* filesystem)
18 : SocketNode(filesystem),
19 emitter_(UnixEventEmitter::MakeUnixEventEmitter(65536)) {
20 emitter_->AttachStream(this);
21 }
22
23 UnixSocketpairNode::UnixSocketpairNode(Filesystem* filesystem,
24 const UnixSocketpairNode& peer)
25 : SocketNode(filesystem), emitter_(peer.emitter_->GetPeerEmitter()) {
26 emitter_->AttachStream(this);
27 }
28
29 EventEmitter* UnixSocketpairNode::GetEventEmitter() {
30 return emitter_.get();
31 }
32
33 Error UnixSocketpairNode::Recv_Locked(void* buffer,
34 size_t len,
35 PP_Resource* out_addr,
36 int* out_len) {
37 assert(emitter_.get());
38 *out_len = emitter_->ReadIn_Locked((char*)buffer, len);
39 *out_addr = 0;
40 return 0;
41 }
42
43 Error UnixSocketpairNode::Send_Locked(const void* buffer,
44 size_t len,
45 PP_Resource out_addr,
46 int* out_len) {
47 assert(emitter_.get());
48 *out_len = emitter_->WriteOut_Locked((char*)buffer, len);
49 return 0;
50 }
51
52 Error UnixSocketpairNode::RecvFrom(const HandleAttr& attr,
53 void* buf,
54 size_t len,
55 int flags,
56 struct sockaddr* src_addr,
57 socklen_t* addrlen,
58 int* out_len) {
59 PP_Resource addr = 0;
60 Error err = RecvHelper(attr, buf, len, flags, &addr, out_len);
61 if (0 == err) {
62 if (src_addr) {
Sam Clegg 2015/09/17 09:40:39 Can you construct a sockaddr_un here? Perhaps wit
avallee 2015/09/17 16:18:01 I can't seem to find sys/un.h on platforms includi
63 unsigned short family = AF_UNIX;
64 memcpy(src_addr, &family,
65 std::min(*addrlen, static_cast<socklen_t>(sizeof(family))));
66 *addrlen = sizeof(family);
67 }
68 }
69
70 return err;
71 }
72
73 Error UnixSocketpairNode::Send(const HandleAttr& attr,
74 const void* buf,
75 size_t len,
76 int flags,
77 int* out_len) {
78 PP_Resource addr = 0;
79 return SendHelper(attr, buf, len, flags, addr, out_len);
80 }
81
82 Error UnixSocketpairNode::SendTo(const HandleAttr& attr,
83 const void* buf,
84 size_t len,
85 int flags,
86 const struct sockaddr* dest_addr,
87 socklen_t addrlen,
88 int* out_len) {
89 PP_Resource addr = 0;
90 return SendHelper(attr, buf, len, flags, addr, out_len);
91 }
92
93 } // namespace nacl_io
94
95 #endif // PROVIDES_SOCKET_API
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698