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

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/kernel_handle.h

Issue 26703008: [NaCl SDK] nacl_io: Add support for non-blocking connect/accept (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef LIBRARIES_NACL_IO_KERNEL_HANDLE_H_ 5 #ifndef LIBRARIES_NACL_IO_KERNEL_HANDLE_H_
6 #define LIBRARIES_NACL_IO_KERNEL_HANDLE_H_ 6 #define LIBRARIES_NACL_IO_KERNEL_HANDLE_H_
7 7
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #include <pthread.h> 9 #include <pthread.h>
10 #include <ppapi/c/pp_resource.h>
10 11
11 #include "nacl_io/error.h" 12 #include "nacl_io/error.h"
12 #include "nacl_io/mount.h" 13 #include "nacl_io/mount.h"
13 #include "nacl_io/mount_node.h" 14 #include "nacl_io/mount_node.h"
15 #include "nacl_io/ossocket.h"
14 #include "nacl_io/ostypes.h" 16 #include "nacl_io/ostypes.h"
15 17
16 #include "sdk_util/macros.h" 18 #include "sdk_util/macros.h"
17 #include "sdk_util/ref_object.h" 19 #include "sdk_util/ref_object.h"
18 #include "sdk_util/scoped_ref.h" 20 #include "sdk_util/scoped_ref.h"
19 #include "sdk_util/simple_lock.h" 21 #include "sdk_util/simple_lock.h"
20 22
21 namespace nacl_io { 23 namespace nacl_io {
22 24
23 class MountNodeSocket; 25 class MountNodeSocket;
(...skipping 14 matching lines...) Expand all
38 // KernelHandle can only be referenced when the KernelProxy lock is held. 40 // KernelHandle can only be referenced when the KernelProxy lock is held.
39 class KernelHandle : public sdk_util::RefObject { 41 class KernelHandle : public sdk_util::RefObject {
40 public: 42 public:
41 43
42 KernelHandle(); 44 KernelHandle();
43 KernelHandle(const ScopedMount& mnt, const ScopedMountNode& node); 45 KernelHandle(const ScopedMount& mnt, const ScopedMountNode& node);
44 ~KernelHandle(); 46 ~KernelHandle();
45 47
46 Error Init(int open_flags); 48 Error Init(int open_flags);
47 49
50 Error Accept(PP_Resource* new_sock, struct sockaddr* addr, socklen_t* len);
51 Error Connect(const struct sockaddr* addr, socklen_t len);
52 Error Fcntl(int request, int* result, ...);
53 Error VFcntl(int request, int* result, va_list args);
54 Error GetDents(struct dirent* pdir, size_t count, int* bytes_written);
55 Error Read(void* buf, size_t nbytes, int* bytes_read);
56 Error Recv(void* buf, size_t len, int flags, int* out_len);
57 Error RecvFrom(void* buf,
58 size_t len,
59 int flags,
60 struct sockaddr* src_addr,
61 socklen_t* addrlen,
62 int* out_len);
48 // Assumes |out_offset| is non-NULL. 63 // Assumes |out_offset| is non-NULL.
49 Error Seek(off_t offset, int whence, off_t* out_offset); 64 Error Seek(off_t offset, int whence, off_t* out_offset);
50 65 Error Send(const void* buf, size_t len, int flags, int* out_len);
51 // Dispatches Read, Write, GetDents to atomically update offs_. 66 Error SendTo(const void* buf,
52 Error Read(void* buf, size_t nbytes, int* bytes_read); 67 size_t len,
68 int flags,
69 const struct sockaddr* dest_addr,
70 socklen_t addrlen,
71 int* out_len);
53 Error Write(const void* buf, size_t nbytes, int* bytes_written); 72 Error Write(const void* buf, size_t nbytes, int* bytes_written);
54 Error GetDents(struct dirent* pdir, size_t count, int* bytes_written);
55 Error Fcntl(int request, int* result, ...);
56 Error VFcntl(int request, int* result, va_list args);
57 73
58 const ScopedMountNode& node() { return node_; } 74 const ScopedMountNode& node() { return node_; }
59 const ScopedMount& mount() { return mount_; } 75 const ScopedMount& mount() { return mount_; }
60 76
77 const HandleAttr& Attr() { return handle_attr_; }
78 private:
61 // Returns the MountNodeSocket* if this node is a socket otherwise returns 79 // Returns the MountNodeSocket* if this node is a socket otherwise returns
62 // NULL. 80 // NULL.
63 MountNodeSocket* socket_node(); 81 MountNodeSocket* socket_node();
64 82
65 const HandleAttr& Data() { return handle_data_; }
66 private:
67 ScopedMount mount_; 83 ScopedMount mount_;
68 ScopedMountNode node_; 84 ScopedMountNode node_;
69 sdk_util::SimpleLock handle_lock_; 85 sdk_util::SimpleLock handle_lock_;
70 HandleAttr handle_data_; 86 HandleAttr handle_attr_;
71 87
72 friend class KernelProxy; 88 friend class KernelProxy;
73 DISALLOW_COPY_AND_ASSIGN(KernelHandle); 89 DISALLOW_COPY_AND_ASSIGN(KernelHandle);
74 }; 90 };
75 91
76 typedef sdk_util::ScopedRef<KernelHandle> ScopedKernelHandle; 92 typedef sdk_util::ScopedRef<KernelHandle> ScopedKernelHandle;
77 93
78 } // namespace nacl_io 94 } // namespace nacl_io
79 95
80 #endif // LIBRARIES_NACL_IO_KERNEL_HANDLE_H_ 96 #endif // LIBRARIES_NACL_IO_KERNEL_HANDLE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698