| Index: ipc/ipc_channel_posix.h
|
| diff --git a/ipc/ipc_channel_posix.h b/ipc/ipc_channel_posix.h
|
| index 4ff3de14575694e113f0ae4d08d5ddcbd92439c9..ecfd41a70b69493abf7d065304b73b7c8e8a4dd2 100644
|
| --- a/ipc/ipc_channel_posix.h
|
| +++ b/ipc/ipc_channel_posix.h
|
| @@ -40,12 +40,10 @@
|
|
|
| namespace IPC {
|
|
|
| -// An implementation of ChannelImpl for POSIX systems that works via
|
| -// socketpairs. See the .cc file for an overview of the implementation.
|
| class Channel::ChannelImpl : public MessageLoopForIO::Watcher {
|
| public:
|
| // Mirror methods of Channel, see ipc_channel.h for description.
|
| - ChannelImpl(const IPC::ChannelHandle &channel_handle, Mode mode,
|
| + ChannelImpl(const IPC::ChannelHandle& channel_handle, Mode mode,
|
| Listener* listener);
|
| ~ChannelImpl();
|
| bool Connect();
|
| @@ -53,13 +51,23 @@ class Channel::ChannelImpl : public MessageLoopForIO::Watcher {
|
| void set_listener(Listener* listener) { listener_ = listener; }
|
| bool Send(Message* message);
|
| int GetClientFileDescriptor() const;
|
| + bool AcceptsConnections() const;
|
| + bool HasAcceptedConnection() const;
|
| + void ResetToAcceptingConnectionState();
|
|
|
| private:
|
| - bool CreatePipe(const IPC::ChannelHandle &channel_handle, Mode mode);
|
| + bool CreatePipe(const IPC::ChannelHandle& channel_handle,
|
| + bool uses_domain_sockets,
|
| + bool listening_socket);
|
|
|
| bool ProcessIncomingMessages();
|
| bool ProcessOutgoingMessages();
|
|
|
| + bool AcceptConnection();
|
| + void ClosePipeOnError();
|
| + void QueueHelloMessage();
|
| + bool IsHelloMessage(const Message* m) const;
|
| +
|
| // MessageLoopForIO::Watcher implementation.
|
| virtual void OnFileCanReadWithoutBlocking(int fd);
|
| virtual void OnFileCanWriteWithoutBlocking(int fd);
|
| @@ -74,17 +82,14 @@ class Channel::ChannelImpl : public MessageLoopForIO::Watcher {
|
|
|
| // Indicates whether we're currently blocked waiting for a write to complete.
|
| bool is_blocked_on_write_;
|
| + bool waiting_connect_;
|
|
|
| // If sending a message blocks then we use this variable
|
| // to keep track of where we are.
|
| size_t message_send_bytes_written_;
|
|
|
| - // If the kTestingChannelID flag is specified, we use a FIFO instead of
|
| - // a socketpair().
|
| - bool uses_fifo_;
|
| -
|
| - // File descriptor we're listening on for new connections in the FIFO case;
|
| - // unused otherwise.
|
| + // File descriptor we're listening on for new connections if we listen
|
| + // for connections.
|
| int server_listen_pipe_;
|
|
|
| // The pipe used for communication.
|
| @@ -132,16 +137,20 @@ class Channel::ChannelImpl : public MessageLoopForIO::Watcher {
|
| std::string input_overflow_buf_;
|
| std::vector<int> input_overflow_fds_;
|
|
|
| - // In server-mode, we have to wait for the client to connect before we
|
| - // can begin reading. We make use of the input_state_ when performing
|
| - // the connect operation in overlapped mode.
|
| - bool waiting_connect_;
|
| + // True if we are responsible for unlinking the unix domain socket file.
|
| + bool must_unlink_;
|
|
|
| ScopedRunnableMethodFactory<ChannelImpl> factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ChannelImpl);
|
| };
|
|
|
| +// The maximum length of the name of a pipe for MODE_NAMED_SERVER or
|
| +// MODE_NAMED_CLIENT if you want to pass in your own socket.
|
| +// The standard size on linux is 108, mac is 104. To maintain consistency
|
| +// across platforms we standardize on the smaller value.
|
| +static const size_t kMaxPipeNameLength = 104;
|
| +
|
| } // namespace IPC
|
|
|
| #endif // IPC_IPC_CHANNEL_POSIX_H_
|
|
|