Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(920)

Unified Diff: ipc/ipc_channel_posix.h

Issue 5749001: Add support for sockets that can listen and accept a connection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix up use of DCHECK which was causing release build failures Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ipc/ipc_channel.h ('k') | ipc/ipc_channel_posix.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « ipc/ipc_channel.h ('k') | ipc/ipc_channel_posix.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698