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..1c0cc1561ca4d861292d6c74087a2165631c54a9 |
| --- /dev/null |
| +++ b/mojo/services/public/interfaces/network/tcp_socket.mojom |
| @@ -0,0 +1,80 @@ |
| +// 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 |
|
viettrungluu
2014/09/30 19:22:15
Why is it important to combine these two cases int
|
| +// 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. |
| +// - For as long as you want to accept incoming connections: |
| +// 1. Listen() to wait for an incoming connection. |
|
yzshen1
2014/09/30 18:21:39
This is different from what Pepper does. Is it int
brettw
2014/09/30 19:17:48
You're right, I misunderstood what Pepper/BSD did.
|
| +// 2. Accept() to 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. |
| + Bind(NetAddress addr) => (NetworkError result); |
|
yzshen1
2014/09/30 18:21:40
For server socket, it seems we don't have a way to
brettw
2014/09/30 19:17:47
Added info.
|
| + |
| + // Starts listening on this socket for incoming connection requests. The |
| + // socket must be bound and not connected. |
| + // |
| + // When an incoming connection is detected, the callback will report success |
| + // and you can call Accept() to accept the connection. If a program then |
| + // wants to listen for more than one incoming connection, it would typically |
| + // call Listen() again to wait for more connections. |
| + // |
| + // 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. |
| + Listen(int32 backlog) => (NetworkError result); |
| + |
| + // Accepts a connection. The socket must be listening. |
| + // |
| + // This function is called to accept an incoming connection after Listen() |
| + // indicates that one is available. 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); |
|
yzshen1
2014/09/30 18:21:39
You might want to append '?' to the type TCPSocket
brettw
2014/09/30 19:17:48
Good idea, I added this everywhere.
|
| + |
| + // 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. If Close() is not called, the connection will be |
|
yzshen1
2014/09/30 18:21:39
Maybe we could revise the comment to also cover th
brettw
2014/09/30 19:17:48
Done
|
| + // implicitly closes when the TCPSocket has been deleted. |
| + Close(); |
| + |
| + // 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); |
| +}; |
| + |
| +} |