Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/network/io_handle.h" 4 : 5 : #include "source/common/common/logger.h" 6 : 7 : namespace Envoy { 8 : namespace Network { 9 : 10 : /** 11 : * IoHandle derivative for sockets. 12 : */ 13 : class IoSocketHandleBaseImpl : public IoHandle, protected Logger::Loggable<Logger::Id::io> { 14 : public: 15 : IoSocketHandleBaseImpl(os_fd_t fd = INVALID_SOCKET, bool socket_v6only = false, 16 : absl::optional<int> domain = absl::nullopt); 17 : ~IoSocketHandleBaseImpl() override; 18 : 19 : // TODO(sbelair2) To be removed when the fd is fully abstracted from clients. 20 0 : os_fd_t fdDoNotUse() const override { return fd_; } 21 : bool isOpen() const override; 22 : bool supportsMmsg() const override; 23 : bool supportsUdpGro() const override; 24 : Api::SysCallIntResult setOption(int level, int optname, const void* optval, 25 : socklen_t optlen) override; 26 : Api::SysCallIntResult getOption(int level, int optname, void* optval, socklen_t* optlen) override; 27 : Api::SysCallIntResult ioctl(unsigned long, void*, unsigned long, void*, unsigned long, 28 : unsigned long*) override; 29 : Api::SysCallIntResult setBlocking(bool blocking) override; 30 : absl::optional<int> domain() override; 31 : Address::InstanceConstSharedPtr localAddress() override; 32 : Address::InstanceConstSharedPtr peerAddress() override; 33 : absl::optional<std::chrono::milliseconds> lastRoundTripTime() override; 34 : absl::optional<uint64_t> congestionWindowInBytes() const override; 35 : absl::optional<std::string> interfaceName() override; 36 : 37 : protected: 38 : os_fd_t fd_; 39 : int socket_v6only_; 40 : const absl::optional<int> domain_; 41 : }; 42 : 43 : } // namespace Network 44 : } // namespace Envoy