blob: 53c61f09dca5aeb1586cfb9dbdbff7e95e9c31dc [file] [log] [blame]
// Copyright 2024 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.fdomain;
// Result from a socket write operation.
type WriteSocketError = struct {
error Error;
wrote uint64;
};
// Socket disposition.
type SocketDisposition = flexible enum {
NO_CHANGE = 0;
WRITE_ENABLED = 1;
WRITE_DISABLED = 2;
};
// Socket type.
type SocketType = flexible enum {
STREAM = 0;
DATAGRAM = 1;
};
// Data resulting from reading a socket.
type SocketData = struct {
data vector<uint8>;
is_datagram bool;
};
// FDomain operations on sockets
@no_resource
open protocol Socket {
// Create a new socket in this FDomain and return both its ends.
flexible CreateSocket(struct {
options SocketType;
handles array<NewHandleId, 2>;
}) -> () error Error;
// Set the disposition of a given socket.
flexible SetSocketDisposition(struct {
handle HandleId;
disposition SocketDisposition;
disposition_peer SocketDisposition;
}) -> () error Error;
// Read data from a socket. This method will fail if the socket is currently being read
// asynchronously.
flexible ReadSocket(struct {
handle HandleId;
max_bytes uint64;
}) -> (SocketData) error Error;
// Write to a socket. This will attempt to write all the data passed, and
// will block and retry whenever it is safe (e.g. it should never return
// SHOULD_WAIT). The `WriteSocketError` contains a `wrote` parameter to
// indicate if some bytes were written successfully before the failure
// occurred.
flexible WriteSocket(struct {
handle HandleId;
data vector<uint8>;
}) -> (struct {
wrote uint64;
}) error WriteSocketError;
// Starts reading from the given socket. Data is returned via the `SocketStreamingData` event. That
// event will occur repeatedly until `ReadSocketStreamingStop` is called for the same handle or the
// event indicates the handle is closed.
flexible ReadSocketStreamingStart(struct {
handle HandleId;
}) -> () error Error;
// Stop asynchronous reading from the given socket.
flexible ReadSocketStreamingStop(struct {
handle HandleId;
}) -> () error Error;
// Data read asynchronously from a socket.
flexible -> OnSocketStreamingData(struct {
handle HandleId;
socket_message flexible union {
1: data SocketData;
2: stopped AioStopped;
};
});
};