Chromium Code Reviews| Index: base/native_sync_socket.h |
| diff --git a/base/native_sync_socket.h b/base/native_sync_socket.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b15edb30907162607da374d1e7fbdc615237aff6 |
| --- /dev/null |
| +++ b/base/native_sync_socket.h |
| @@ -0,0 +1,56 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef BASE_NATIVE_SYNC_SOCKET_H_ |
| +#define BASE_NATIVE_SYNC_SOCKET_H_ |
| + |
| +#include "base/process/process_handle.h" |
| +#include "base/sync_socket.h" |
| + |
| +#if defined(OS_POSIX) |
| +#include "base/file_descriptor_posix.h" |
| +#endif |
| + |
| +namespace base { |
| + |
| +// Helper class for using |SyncSocket| cross-platform |
| +class NativeSyncSocket { |
|
tommi (sloooow) - chröme
2014/08/29 11:25:30
This class seems to rely on SyncSocket but doesn't
no longer working on chromium
2014/08/29 12:23:06
You and I should have a discussion with Tommi on i
burnik
2014/08/29 13:26:16
Agreed. Socket should be more cross-platform frien
burnik
2014/08/29 13:26:16
I agree. SyncSocket should have a descriptor which
|
| + public: |
| +#if defined(OS_WIN) |
| + typedef base::SyncSocket::Handle Descriptor; |
| + |
| + static bool PrepareForeignSocketDescriptor( |
|
tommi (sloooow) - chröme
2014/08/29 11:25:30
implementation should be in the cc file
tommi (sloooow) - chröme
2014/08/29 11:25:30
I know that this method name comes from elsewhere,
burnik
2014/08/29 13:26:16
Acknowledged.
burnik
2014/08/29 13:26:16
Agreed. I think name should be something like |Pre
|
| + base::ProcessHandle process_handle, |
| + base::SyncSocket * foreign_socket, |
| + base::SyncSocket::Handle * foreign_handle) { |
| + ::DuplicateHandle(GetCurrentProcess(), foreign_socket->handle(), |
| + process_handle, foreign_handle, |
| + 0, FALSE, DUPLICATE_SAME_ACCESS); |
| + return (*foreign_handle != 0); |
| + } |
| + |
| + static base::SyncSocket::Handle Unwrap(const Descriptor& descriptor) { |
| + return descriptor; |
| + } |
| + |
| +#else |
| + typedef base::FileDescriptor Descriptor; |
| + |
| + static bool PrepareForeignSocketDescriptor( |
| + base::ProcessHandle process_handle, |
| + base::SyncSocket * foreign_socket, |
| + base::FileDescriptor * foreign_handle) { |
| + foreign_handle->fd = foreign_socket->handle(); |
| + foreign_handle->auto_close = false; |
| + return (foreign_handle->fd != -1); |
| + } |
| + |
| + static int Unwrap(const Descriptor& descriptor) { |
|
tommi (sloooow) - chröme
2014/08/29 11:25:30
use base::SyncSocket::Handle here as well as the r
burnik
2014/08/29 13:26:16
Good point. When impl moves to .cc it will make mo
|
| + return descriptor.fd; |
| + } |
| +#endif |
| +}; |
| + |
| +} // namespace base |
| +#endif // BASE_NATIVE_SYNC_SOCKET_H_ |