/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <memory> #include <optional> #include <variant> #include <glog/logging.h> #include <folly/File.h> namespace folly { /** * Represents an ordered collection of file descriptors. This union type * either contains: * - FDs to be sent on a socket -- with shared ownership, since the sender * may still need them, OR * - FDs just received, with sole ownership. * * This hides the variant of containers behind a `unique_ptr` so that the * normal / fast path, which is not passing FDs, is as light as possible, * adding just 8 bytes for a pointer. * * == Rationale == * * In order to send FDs over Unix sockets, Thrift plumbs them through a * variety of classes. Many of these can be used both for send & receive * operations (THeader, StreamPayload, etc). * * This is especially useful in regular Thrift request-response handler * methods, where the same THeader is used for consuming the received FDs, * and sending back FDs with the response -- necessarily in that order. */ class SocketFds final { … }; } // namespace folly