18 #include <gtest/gtest.h>
25 #include "../internal.h"
26 #include "../test/test_util.h"
28 #if !defined(OPENSSL_WINDOWS)
29 #include <arpa/inet.h>
32 #include <netinet/in.h>
34 #include <sys/socket.h>
45 #if !defined(OPENSSL_WINDOWS)
67 TEST(BIOTest, SocketConnect) {
68 static const char kTestMessage[] =
"test";
69 int listening_sock = -1;
73 struct sockaddr_in *sin = (
struct sockaddr_in *) &ss;
82 if (bind(listening_sock, (
struct sockaddr *)sin6,
sizeof(*sin6)) == -1) {
85 ss.ss_family = AF_INET;
86 listening_sock =
socket(AF_INET, SOCK_STREAM, 0);
89 ASSERT_EQ(1, inet_pton(AF_INET,
"127.0.0.1", &sin->sin_addr))
91 ASSERT_EQ(0, bind(listening_sock, (
struct sockaddr *)sin,
sizeof(*sin)))
97 ASSERT_EQ(0, getsockname(listening_sock, (
struct sockaddr *)&ss, &
len))
103 ntohs(sin6->sin6_port));
104 }
else if (ss.ss_family == AF_INET) {
105 BIO_snprintf(hostname,
sizeof(hostname),
"127.0.0.1:%d",
106 ntohs(sin->sin_port));
114 ASSERT_EQ(
static_cast<int>(
sizeof(kTestMessage)),
115 BIO_write(bio.get(), kTestMessage,
sizeof(kTestMessage)));
118 int sock = accept(listening_sock, (
struct sockaddr *) &ss, &
len);
123 char buf[
sizeof(kTestMessage)];
124 ASSERT_EQ(
static_cast<int>(
sizeof(kTestMessage)),
125 recv(sock,
buf,
sizeof(
buf), 0))
133 static const size_t kLengths[] = {5, 250, 251, 252, 253, 254, 1023};
138 for (
size_t length : kLengths) {
169 {
true, {0x30, 2, 1, 2, 0, 0}, 0, 4, 100},
170 {
false , {0x30, 3, 1, 2}, 0, 0, 100},
171 {
false , {0x30, 0x81, 1, 1}, 0, 0, 100},
172 {
false , {0x30, 0x82, 0, 1, 1}, 0, 0, 100},
215 bssl::UniquePtr<uint8_t> out_storage(
out);
231 bssl::UniquePtr<BIO> free_bio1(bio1), free_bio2(bio2);