Chromium Code Reviews| Index: mojo/services/public/interfaces/network/tcp_socket.mojom |
| diff --git a/mojo/services/public/interfaces/network/tcp_socket.mojom b/mojo/services/public/interfaces/network/tcp_socket.mojom |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a64f10e9a498b722d1c2ea179bfef943ecd44b4a |
| --- /dev/null |
| +++ b/mojo/services/public/interfaces/network/tcp_socket.mojom |
| @@ -0,0 +1,78 @@ |
| +// Copyright 2014 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. |
| + |
| +import "mojo/services/public/interfaces/network/net_address.mojom" |
| +import "mojo/services/public/interfaces/network/network_error.mojom" |
| + |
| +module mojo { |
| + |
| +struct TCPSocketInfo { |
| + NetAddress local_address; |
| + NetAddress remote_address; |
| +}; |
| + |
| +// Represents a TCP socket. A socket can represent either a connection to a |
| +// remote host, or a local server socket waiting for incoming connections. |
| +// |
| +// For client connections: |
| +// - Connect(), providing a pair of streams to use for data transfer. |
| +// - Read and write from the streams as desired. |
| +// - Close(). |
| +// |
| +// For server connections: |
| +// - Bind() to allocate a port. |
| +// - Listen() to start listening for incoming connections. |
| +// - For as long as you want to accept incoming connections: |
| +// - Accept() to wait for and initiate a connection once one is available. |
| +// - Close(). |
| +interface TCPSocket { |
| + // Binds this connection to a local port. The TCPSocket must not be bound, |
| + // listening, or connected. |
| + // |
| + // This function is required to initialize a server socket for using Listen(), |
| + // but is optional when using Connect() to initiate a client connection. On |
| + // success, built_to will indicate the local address that was bound. |
|
Ryan Sleevi
2014/09/30 20:48:08
typo: built_to -> bound_to
|
| + Bind(NetAddress addr) => (NetworkError result, NetAddress? bound_to); |
| + |
| + // Starts listening on this socket for incoming connection requests. The |
| + // socket must be bound and not connected. |
| + // |
| + // The backlog is a hint indicating the number of incoming connections that |
| + // can be queued up at one time waiting for Accept(). This queuing will |
| + // happen when connections are incoming faster than Accept() can be called. |
|
Ryan Sleevi
2014/09/30 21:35:28
Note that in normal socket authoring, what you wan
brettw
2014/09/30 21:50:43
I was just copying the BSD Listen() function. I'm
|
| + Listen(int32 backlog) => (NetworkError result); |
|
Ryan Sleevi
2014/09/30 20:48:08
This creates an inconsistent interface. You can cr
brettw
2014/09/30 21:06:17
This object attempts to represent a sockfd. So you
viettrungluu
2014/09/30 21:25:48
So I now understand why I hate this API.
Fundamen
Ryan Sleevi
2014/09/30 21:35:28
From looking at the past work on Pepper and Extens
brettw
2014/09/30 22:16:17
The goal is to make it straightforward to write a
Ryan Sleevi
2014/10/01 04:05:23
This function in particular is NOT a straightforwa
|
| + |
| + // Accepts a connection. The socket must be listening. |
| + // |
| + // This function is called to accept an incoming connection. The caller |
| + // provides the streams that will be used to send and receive data on the |
| + // connection. |
| + // |
| + // On success, the callback will be provided with the new socket that |
| + // represents the connection. It will already be in a connected state and the |
| + // data streams will be ready to use. |
| + Accept(handle<data_pipe_consumer> send_stream, |
| + handle<data_pipe_producer> receive_stream) => |
| + (NetworkError result, TCPSocket? socket, TCPSocketInfo? info); |
|
Ryan Sleevi
2014/09/30 20:48:07
What happens if there are no sockets pending accep
brettw
2014/09/30 21:06:17
Yes.
|
| + |
| + // Connects the socket to the given address. The socket must not be listening |
| + // or previously connected. Binding the socket beforehand is optional. |
| + Connect(NetAddress addr, |
| + handle<data_pipe_consumer> send_stream, |
| + handle<data_pipe_producer> receive_stream) => |
| + (NetworkError result, TCPSocketInfo? info); |
| + |
| + // Closes the connection or stops listening for connections, depending on |
| + // whether this socket is in server or client mode. If Close() is not called, |
| + // the connection will be implicitly closes when the TCPSocket has been |
| + // deleted. |
| + Close(); |
|
Ryan Sleevi
2014/09/30 20:48:08
You'll want to rethink how this interface behaves.
brettw
2014/09/30 21:06:16
I don't follow entirely.
Connection reuse is some
Ryan Sleevi
2014/09/30 21:35:29
Concrete proposals:
1) Make the API distinguish be
willchan no longer on Chromium
2014/09/30 22:03:14
Can you clarify more details on the asynchronous p
|
| + |
| + // Controls whether small writes are coalesced to make TCP segments, and |
| + // instead delivers data immediately. The default value is true (coalescing |
| + // enabled). |
| + SetCoaleseWrites(bool coalesce); |
|
Ryan Sleevi
2014/09/30 20:48:07
Why not call this what it is (and which most socke
brettw
2014/09/30 21:06:17
I mentioned this in the comment.
Ryan Sleevi
2014/09/30 21:35:29
Did you mean the existing comment, or an update?
brettw
2014/09/30 21:50:43
This was added in a comment in the patch that was
|
| +}; |
| + |
| +} |