summaryrefslogtreecommitdiffstats
path: root/base/sync_socket.h
diff options
context:
space:
mode:
authorsehr@google.com <sehr@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-24 16:14:53 +0000
committersehr@google.com <sehr@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-24 16:14:53 +0000
commit0840cc764d0f0b693d3762c356b7d35e58d343af (patch)
tree8f1f90ef17b8e395f27f239beaf86ce9b5af6467 /base/sync_socket.h
parent160673757540777e7db373c56b61673f05870c99 (diff)
downloadchromium_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.h66
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_