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
1281
  os_fd_t fdDoNotUse() const override { return fd_; }
21
  bool isOpen() const override;
22
  bool wasConnected() const override;
23
  bool supportsMmsg() const override;
24
  bool supportsUdpGro() const override;
25
  Api::SysCallIntResult setOption(int level, int optname, const void* optval,
26
                                  socklen_t optlen) override;
27
  Api::SysCallIntResult getOption(int level, int optname, void* optval, socklen_t* optlen) override;
28
  Api::SysCallIntResult ioctl(unsigned long, void*, unsigned long, void*, unsigned long,
29
                              unsigned long*) override;
30
  Api::SysCallIntResult setBlocking(bool blocking) override;
31
  absl::optional<int> domain() override;
32
  absl::StatusOr<Address::InstanceConstSharedPtr> localAddress() override;
33
  absl::StatusOr<Address::InstanceConstSharedPtr> peerAddress() override;
34
  absl::optional<std::chrono::milliseconds> lastRoundTripTime() override;
35
  absl::optional<uint64_t> congestionWindowInBytes() const override;
36
  absl::optional<std::string> interfaceName() override;
37

            
38
protected:
39
  os_fd_t fd_;
40
  int socket_v6only_;
41
  const absl::optional<int> domain_;
42
  bool was_connected_ = false;
43
};
44

            
45
} // namespace Network
46
} // namespace Envoy