net/addr/sock: Add inet only type

Change-Id: I54737280e5eb7eb208afaca8ef4abb225d0a3b38
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/net/addr/sock.cpp b/test/net/addr/sock.cpp
index e326572..e5ed833 100644
--- a/test/net/addr/sock.cpp
+++ b/test/net/addr/sock.cpp
@@ -152,11 +152,40 @@
     EXPECT_EQ("a unix:a b", std::format("a {} b", SockUAddr("a"sv)));
 }
 
+TEST(SockInAddr, Basic)
+{
+    constexpr SockInAddr addr1(In4Addr{255}, 3959);
+    constexpr SockInAddr addr2(In6Addr{255}, 3959);
+    EXPECT_NE(addr1, addr2);
+    EXPECT_EQ(addr1, addr1);
+    auto buf = addr1.buf();
+    EXPECT_EQ(buf.len, sizeof(sockaddr_in));
+    EXPECT_EQ(addr1.sockaddrLen(), sizeof(sockaddr_in));
+    EXPECT_EQ(addr2.sockaddrLen(), sizeof(sockaddr_in6));
+}
+
+TEST(SockInAddr, FromStr)
+{
+    constexpr FromStr<SockInAddr> fs;
+    EXPECT_THROW(fs("abcd"sv), std::invalid_argument);
+    EXPECT_THROW(fs("/nope"sv), std::invalid_argument);
+    EXPECT_EQ((Sock4Addr{In4Addr{}, 30}), fs("0.0.0.0:30"sv));
+    EXPECT_EQ((Sock6Addr{In6Addr{}, 80, 0}), fs("[::]:80"sv));
+    EXPECT_THROW(fs("unix:/nope"sv), std::invalid_argument);
+}
+
+TEST(SockInAddr, ToStr)
+{
+    ToStrHandle<ToStr<SockInAddr>> tsh;
+    EXPECT_EQ("0.0.0.0:3949", tsh(Sock4Addr(In4Addr{}, 3949)));
+    EXPECT_EQ("a [::]:356 b",
+              std::format("a {} b", Sock6Addr(In6Addr{}, 356, 0)));
+}
+
 TEST(SockAnyAddr, Basic)
 {
-    constexpr SockAnyAddr addr1(std::in_place_type<Sock4Addr>, In4Addr{255},
-                                3959);
-    constexpr SockAnyAddr addr2(std::in_place_type<SockUAddr>, "/hi"sv);
+    constexpr SockAnyAddr addr1(In4Addr{255}, 3959);
+    constexpr SockAnyAddr addr2("/hi"sv);
     EXPECT_NE(addr1, addr2);
     EXPECT_EQ(addr1, addr1);
     auto buf = addr1.buf();