diff options
author | sehr@google.com <sehr@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-24 16:14:53 +0000 |
---|---|---|
committer | sehr@google.com <sehr@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-24 16:14:53 +0000 |
commit | 0840cc764d0f0b693d3762c356b7d35e58d343af (patch) | |
tree | 8f1f90ef17b8e395f27f239beaf86ce9b5af6467 /base/sync_socket.h | |
parent | 160673757540777e7db373c56b61673f05870c99 (diff) | |
download | chromium_src-0840cc764d0f0b693d3762c356b7d35e58d343af.zip chromium_src-0840cc764d0f0b693d3762c356b7d35e58d343af.tar.gz chromium_src-0840cc764d0f0b693d3762c356b7d35e58d343af.tar.bz2 |
This adds the first version of SyncSocket to base, along with a trivial unittest.
SyncSocket provides a blocking send/receive that can be used for synchronization.
Review URL: http://codereview.chromium.org/418004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32927 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/sync_socket.h')
-rw-r--r-- | base/sync_socket.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/base/sync_socket.h b/base/sync_socket.h new file mode 100644 index 0000000..ad181ff --- /dev/null +++ b/base/sync_socket.h @@ -0,0 +1,66 @@ +// Copyright (c) 2009 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_SYNC_SOCKET_H_ +#define BASE_SYNC_SOCKET_H_ + +// A socket abstraction used for sending and receiving plain +// data. Because they are blocking, they can be used to perform +// rudimentary cross-process synchronization with low latency. + +#include "base/basictypes.h" +#if defined(OS_WIN) +#include <windows.h> +#endif +#include <sys/types.h> + +namespace base { + +class SyncSocket { + public: +#if defined(OS_WIN) + typedef HANDLE Handle; +#else + typedef int Handle; +#endif + + // Creates a SyncSocket from a Handle. Used in transport. + explicit SyncSocket(Handle handle) : handle_(handle) { } + ~SyncSocket() { Close(); } + + // Creates an unnamed pair of connected sockets. + // pair is a pointer to an array of two SyncSockets in which connected socket + // descriptors are returned. Returns true on success, false on failure. + static bool CreatePair(SyncSocket* pair[2]); + + // Closes the SyncSocket. Returns true on success, false on failure. + bool Close(); + + // Sends the message to the remote peer of the SyncSocket. + // Note it is not safe to send messages from the same socket handle by + // multiple threads simultaneously. + // buffer is a pointer to the data to send. + // length is the length of the data to send (must be non-zero). + // Returns the number of bytes sent, or 0 upon failure. + size_t Send(const void* buffer, size_t length); + + // Receives a message from an SyncSocket. + // buffer is a pointer to the buffer to receive data. + // length is the number of bytes of data to receive (must be non-zero). + // Returns the number of bytes received, or 0 upon failure. + size_t Receive(void* buffer, size_t length); + + // Extracts the contained handle. Used for transferring between + // processes. + Handle handle() const { return handle_; } + + private: + Handle handle_; + + DISALLOW_COPY_AND_ASSIGN(SyncSocket); +}; + +} // namespace base + +#endif // BASE_SYNC_SOCKET_H_ |