Index: ipc/ipc_channel.h |
diff --git a/ipc/ipc_channel.h b/ipc/ipc_channel.h |
index 132b49432a52cfbd35948958badd852e8c2a6119..c257a8e9f9f753509f4e3b3d46cf1e59e14e5fd8 100644 |
--- a/ipc/ipc_channel.h |
+++ b/ipc/ipc_channel.h |
@@ -13,6 +13,21 @@ |
namespace IPC { |
//------------------------------------------------------------------------------ |
+// See |
+// http://www.chromium.org/developers/design-documents/inter-process-communication |
+// for overview of IPC in Chromium. |
+ |
+// Channels are implemented using named pipes on Windows, and |
+// socket pairs (or in some special cases unix domain sockets) on POSIX. |
+// On Windows we access pipes in various processes by name. |
+// On POSIX we pass file descriptors to child processes and assign names to them |
+// in a lookup table. |
+// In general on POSIX we do not use unix domain sockets due to security |
+// concerns and the fact that they can leave garbage around the file system |
+// (MacOS does not support abstract named unix domain sockets). |
+// You can use unix domain sockets if you like on POSIX by constructing the |
+// the channel with the mode set to one of the NAMED modes. NAMED modes are |
+// currently used by automation and service processes. |
class Channel : public Message::Sender { |
// Security tests need access to the pipe handle. |
@@ -34,12 +49,29 @@ class Channel : public Message::Sender { |
// Called when an error is detected that causes the channel to close. |
// This method is not called when a channel is closed normally. |
virtual void OnChannelError() {} |
+ |
+#if defined(OS_POSIX) |
+ // Called on the server side when a channel that listens for connections |
+ // denies an attempt to connect. |
+ virtual void OnChannelDenied() {} |
+ |
+ // Called on the server side when a channel that listens for connections |
+ // has an error that causes the listening channel to close. |
+ virtual void OnChannelListenError() {} |
+#endif // OS_POSIX |
}; |
enum Mode { |
MODE_NONE, |
MODE_SERVER, |
- MODE_CLIENT |
+ MODE_CLIENT, |
+ // Channels on Windows are named by default and accessible from other |
+ // processes. On POSIX channels are anonymous by default and not accessible |
+ // from other processes. Named channels work via named unix domain sockets. |
+ // On Windows MODE_NAMED_SERVER == MODE_SERVER and |
+ // MODE_NAMED_CLIENT == MODE_CLIENT. |
+ MODE_NAMED_SERVER, |
+ MODE_NAMED_CLIENT, |
}; |
enum { |
@@ -77,6 +109,10 @@ class Channel : public Message::Sender { |
bool Connect() WARN_UNUSED_RESULT; |
// Close this Channel explicitly. May be called multiple times. |
+ // On POSIX calling close on an IPC channel that listens for connections will |
+ // cause it to close any accepted connections, and it will stop listening for |
+ // new connections. If you just want to close the currently accepted |
+ // connection and listen for new ones, use ResetToAcceptingConnectionState. |
void Close(); |
// Modify the Channel's listener. |
@@ -92,11 +128,23 @@ class Channel : public Message::Sender { |
// On POSIX an IPC::Channel wraps a socketpair(), this method returns the |
// FD # for the client end of the socket. |
// This method may only be called on the server side of a channel. |
- // |
- // If the kTestingChannelID flag is specified on the command line then |
- // a named FIFO is used as the channel transport mechanism rather than a |
- // socketpair() in which case this method returns -1. |
int GetClientFileDescriptor() const; |
+ |
+ // On POSIX an IPC::Channel can either wrap an established socket, or it |
+ // can wrap a socket that is listening for connections. Currently an |
+ // IPC::Channel that listens for connections can only accept one connection |
+ // at a time. |
+ |
+ // Returns true if the channel supports listening for connections. |
+ bool AcceptsConnections() const; |
+ |
+ // Returns true if the channel supports listening for connections and is |
+ // currently connected. |
+ bool HasAcceptedConnection() const; |
+ |
+ // Closes any currently connected socket, and returns to a listening state |
+ // for more connections. |
+ void ResetToAcceptingConnectionState(); |
#endif // defined(OS_POSIX) |
protected: |