diff --git a/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc b/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
index 6cc6961..c7e18ce 100644
--- a/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
+++ b/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
@@ -4,16 +4,16 @@
 
 #include "quiche/quic/core/io/event_loop_connecting_client_socket.h"
 
+#include <functional>
 #include <memory>
 #include <optional>
 #include <string>
-#include <tuple>
 #include <utility>
+#include <vector>
 
 #include "absl/functional/bind_front.h"
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
-#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
 #include "quiche/quic/core/connecting_client_socket.h"
@@ -22,7 +22,7 @@
 #include "quiche/quic/core/io/quic_event_loop.h"
 #include "quiche/quic/core/io/socket.h"
 #include "quiche/quic/core/quic_time.h"
-#include "quiche/quic/core/quic_types.h"
+#include "quiche/quic/platform/api/quic_ip_address_family.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/quic/test_tools/mock_clock.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
@@ -200,9 +200,6 @@
         return socket_factory_->CreateTcpClientSocket(
             peer_address, /*receive_buffer_size=*/0, /*send_buffer_size=*/0,
             async_visitor);
-      default:
-        // Unexpected protocol.
-        QUICHE_NOTREACHED();
     }
   }
 
@@ -222,9 +219,6 @@
         return socket_factory_->CreateTcpClientSocket(
             peer_address, /*receive_buffer_size=*/0, /*send_buffer_size=*/4,
             async_visitor);
-      default:
-        // Unexpected protocol.
-        QUICHE_NOTREACHED();
     }
   }
 
@@ -281,9 +275,6 @@
         runner = std::make_unique<TestTcpServerSocketRunner>(
             server_socket_descriptor_, std::move(behavior));
         break;
-      default:
-        // Unexpected protocol.
-        QUICHE_NOTREACHED();
     }
 
     // Runner takes responsibility for closing server socket.
@@ -384,9 +375,6 @@
       EXPECT_TRUE(connect_result_.value().ok());
       socket->Disconnect();
       break;
-    default:
-      // Unexpected protocol.
-      FAIL();
   }
 }
 
@@ -423,9 +411,6 @@
       // server.
       EXPECT_TRUE(connect_result_.value().ok());
       break;
-    default:
-      // Unexpected protocol.
-      FAIL();
   }
 }
 
@@ -674,9 +659,6 @@
       socket->SendAsync(data);
       expected = data;
       break;
-    default:
-      // Unexpected protocol.
-      FAIL();
   }
   ASSERT_TRUE(send_result_.has_value());
   EXPECT_TRUE(send_result_.value().ok());
diff --git a/quiche/quic/core/io/socket.cc b/quiche/quic/core/io/socket.cc
index d41106f..0118003 100644
--- a/quiche/quic/core/io/socket.cc
+++ b/quiche/quic/core/io/socket.cc
@@ -50,10 +50,10 @@
   }
 }
 
-absl::Status SetSockOptInt(SocketFd fd, int level, int option, int value) {
+absl::Status SetSockOptInt(SocketFd fd, int option, int value) {
   QUICHE_DCHECK_NE(fd, kInvalidSocketFd);
 
-  int result = SyscallSetsockopt(fd, level, option, &value, sizeof(value));
+  int result = SyscallSetsockopt(fd, SOL_SOCKET, option, &value, sizeof(value));
 
   if (result >= 0) {
     return absl::OkStatus();
@@ -71,21 +71,14 @@
   QUICHE_DCHECK_NE(fd, kInvalidSocketFd);
   QUICHE_DCHECK_LE(size, QuicByteCount{INT_MAX});
 
-  return SetSockOptInt(fd, SOL_SOCKET, SO_RCVBUF, static_cast<int>(size));
+  return SetSockOptInt(fd, SO_RCVBUF, static_cast<int>(size));
 }
 
 absl::Status SetSendBufferSize(SocketFd fd, QuicByteCount size) {
   QUICHE_DCHECK_NE(fd, kInvalidSocketFd);
   QUICHE_DCHECK_LE(size, QuicByteCount{INT_MAX});
 
-  return SetSockOptInt(fd, SOL_SOCKET, SO_SNDBUF, static_cast<int>(size));
-}
-
-absl::Status SetIpHeaderIncluded(SocketFd fd, bool ip_header_included) {
-  QUICHE_DCHECK_NE(fd, kInvalidSocketFd);
-
-  return SetSockOptInt(fd, IPPROTO_IP, IP_HDRINCL,
-                       static_cast<int>(ip_header_included));
+  return SetSockOptInt(fd, SO_SNDBUF, static_cast<int>(size));
 }
 
 absl::Status Connect(SocketFd fd, const QuicSocketAddress& peer_address) {
diff --git a/quiche/quic/core/io/socket.h b/quiche/quic/core/io/socket.h
index 319dff4..edff4ee 100644
--- a/quiche/quic/core/io/socket.h
+++ b/quiche/quic/core/io/socket.h
@@ -5,6 +5,9 @@
 #ifndef QUICHE_QUIC_CORE_IO_SOCKET_H_
 #define QUICHE_QUIC_CORE_IO_SOCKET_H_
 
+#include <functional>
+#include <string>
+
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
@@ -12,6 +15,7 @@
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/platform/api/quic_ip_address_family.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
+#include "quiche/common/platform/api/quiche_export.h"
 
 #if defined(_WIN32)
 #include <winsock2.h>
@@ -38,7 +42,6 @@
 enum class SocketProtocol {
   kUdp,
   kTcp,
-  kRawIp,
 };
 
 inline absl::string_view GetProtocolName(SocketProtocol protocol) {
@@ -47,8 +50,6 @@
       return "UDP";
     case SocketProtocol::kTcp:
       return "TCP";
-    case SocketProtocol::kRawIp:
-      return "RAW_IP";
   }
 
   return "unknown";
@@ -75,11 +76,6 @@
 absl::Status SetReceiveBufferSize(SocketFd fd, QuicByteCount size);
 absl::Status SetSendBufferSize(SocketFd fd, QuicByteCount size);
 
-// Only allowed for raw IP sockets. If set, sent data buffers include the IP
-// header. If not set, sent data buffers only contain the IP packet payload, and
-// the header will be generated.
-absl::Status SetIpHeaderIncluded(SocketFd fd, bool ip_header_included);
-
 // Connects socket `fd` to `peer_address`.  Returns a status with
 // `absl::StatusCode::kUnavailable` iff the socket is non-blocking and the
 // connection could not be immediately completed.  The socket will then complete
diff --git a/quiche/quic/core/io/socket_internal.h b/quiche/quic/core/io/socket_internal.h
index d11c0ef..3fc9f00 100644
--- a/quiche/quic/core/io/socket_internal.h
+++ b/quiche/quic/core/io/socket_internal.h
@@ -21,8 +21,6 @@
       return SOCK_DGRAM;
     case SocketProtocol::kTcp:
       return SOCK_STREAM;
-    case SocketProtocol::kRawIp:
-      return SOCK_RAW;
   }
 
   QUICHE_NOTREACHED();
@@ -35,8 +33,6 @@
       return IPPROTO_UDP;
     case SocketProtocol::kTcp:
       return IPPROTO_TCP;
-    case SocketProtocol::kRawIp:
-      return IPPROTO_RAW;
   }
 
   QUICHE_NOTREACHED();
diff --git a/quiche/quic/core/io/socket_test.cc b/quiche/quic/core/io/socket_test.cc
index 9e18cc1..da1d24a 100644
--- a/quiche/quic/core/io/socket_test.cc
+++ b/quiche/quic/core/io/socket_test.cc
@@ -5,12 +5,13 @@
 #include "quiche/quic/core/io/socket.h"
 
 #include <string>
+#include <utility>
 
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
-#include "quiche/quic/platform/api/quic_ip_address.h"
+#include "quiche/quic/platform/api/quic_ip_address_family.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/platform/api/quiche_test.h"
@@ -38,20 +39,6 @@
   }
 }
 
-SocketFd CreateTestRawSocket(bool blocking = true) {
-  absl::StatusOr<SocketFd> socket =
-      socket_api::CreateSocket(quiche::TestLoopback().address_family(),
-                               socket_api::SocketProtocol::kRawIp, blocking);
-
-  if (socket.ok()) {
-    return socket.value();
-  } else {
-    // This is expected if test not run with relevant admin privileges.
-    QUICHE_CHECK(absl::IsPermissionDenied(socket.status()));
-    return kInvalidSocketFd;
-  }
-}
-
 TEST(SocketTest, CreateAndCloseSocket) {
   QuicIpAddress localhost_address = quiche::TestLoopback();
   absl::StatusOr<SocketFd> created_socket = socket_api::CreateSocket(
@@ -62,22 +49,6 @@
   QUICHE_EXPECT_OK(socket_api::Close(created_socket.value()));
 }
 
-TEST(SocketTest, CreateAndCloseRawSocket) {
-  QuicIpAddress localhost_address = quiche::TestLoopback();
-  absl::StatusOr<SocketFd> created_socket = socket_api::CreateSocket(
-      localhost_address.address_family(), socket_api::SocketProtocol::kRawIp);
-
-  // Raw IP socket creation will typically fail if not run with relevant admin
-  // privileges.
-  if (!created_socket.ok()) {
-    EXPECT_THAT(created_socket.status(),
-                StatusIs(absl::StatusCode::kPermissionDenied));
-    return;
-  }
-
-  QUICHE_EXPECT_OK(socket_api::Close(created_socket.value()));
-}
-
 TEST(SocketTest, SetSocketBlocking) {
   SocketFd socket = CreateTestSocket(socket_api::SocketProtocol::kUdp,
                                      /*blocking=*/true);
@@ -105,30 +76,6 @@
   QUICHE_EXPECT_OK(socket_api::Close(socket));
 }
 
-TEST(SocketTest, SetIpHeaderIncludedForRaw) {
-  SocketFd socket = CreateTestRawSocket(/*blocking=*/true);
-  if (socket == kInvalidSocketFd) {
-    return;
-  }
-
-  QUICHE_EXPECT_OK(
-      socket_api::SetIpHeaderIncluded(socket, /*ip_header_included=*/true));
-
-  QUICHE_EXPECT_OK(socket_api::Close(socket));
-}
-
-TEST(SocketTest, SetIpHeaderIncludedForUdp) {
-  SocketFd socket = CreateTestSocket(socket_api::SocketProtocol::kUdp,
-                                     /*blocking=*/true);
-
-  // Expect option only allowed for raw IP sockets.
-  EXPECT_THAT(
-      socket_api::SetIpHeaderIncluded(socket, /*ip_header_included=*/true),
-      StatusIs(absl::StatusCode::kInvalidArgument));
-
-  QUICHE_EXPECT_OK(socket_api::Close(socket));
-}
-
 TEST(SocketTest, Connect) {
   SocketFd socket = CreateTestSocket(socket_api::SocketProtocol::kUdp);
 
