blob: fe8af350218eb32d3642439c555ae02ae73aa639 [file] [log] [blame]
// Copyright 2016 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.
#ifndef SRC_LIB_FSL_IO_REDIRECTION_H_
#define SRC_LIB_FSL_IO_REDIRECTION_H_
#include <lib/zx/handle.h>
#include <lib/zx/socket.h>
#include "src/lib/fxl/fxl_export.h"
namespace fsl {
// Contains a startup handle used to provide a handle to process during launch.
struct StartupHandle {
// The startup handle id, as described by <zircon/processargs.h>.
uint32_t id;
// The startup handle value.
zx::handle handle;
};
// Creates a socket and returns one end of it along with a |StartupHandle|
// which can be used to bind the other end to a file descriptor in a new
// process which is about to be launched.
//
// |startup_fd| is the file descriptor number to which the socket will be
// bound in the new process, eg. use 0 to bind to standard input.
// |out_socket| receives the local end of the socket.
// |out_startup_handle| receives the startup handle which must be passed to
// the launcher to bind the remote end of the socket in the new process.
FXL_EXPORT zx_status_t CreateRedirectedSocket(int startup_fd, zx::socket* out_socket,
StartupHandle* out_startup_handle);
} // namespace fsl
#endif // SRC_LIB_FSL_IO_REDIRECTION_H_