@@ -93,3 +93,44 @@ TEST(recvfrom, test) {
93
93
EXPECT_SYS (0 , 0 , close (client1 ));
94
94
WAIT (exit , 0 );
95
95
}
96
+
97
+ // server listens for connections, accepts a connection, and sends data
98
+ // client connects to server recieves with recvfrom and verifies addrsize
99
+ // is 0 as the sender info isn't available on connection sockets.
100
+ TEST (recvfrom , tcp ) {
101
+ uint32_t addrsize = sizeof (struct sockaddr_in );
102
+ struct sockaddr_in server = {
103
+ .sin_family = AF_INET ,
104
+ .sin_addr .s_addr = htonl (0x7f000001 ),
105
+ };
106
+ ASSERT_SYS (0 , 3 , socket (AF_INET , SOCK_STREAM , IPPROTO_TCP ));
107
+ ASSERT_SYS (0 , 0 , bind (3 , (struct sockaddr * )& server , sizeof (server )));
108
+ ASSERT_SYS (0 , 0 , getsockname (3 , (struct sockaddr * )& server , & addrsize ));
109
+ ASSERT_SYS (0 , 0 , listen (3 , 5 ));
110
+
111
+ ////////////////////////////////////////////////////////////////////////////////
112
+ SPAWN (fork );
113
+ struct sockaddr_in data , addr ;
114
+ uint32_t addrsize = sizeof (struct sockaddr_in );
115
+ EXPECT_SYS (0 , 0 , close (3 ));
116
+ ASSERT_SYS (0 , 3 , socket (AF_INET , SOCK_STREAM , IPPROTO_TCP ));
117
+ ASSERT_SYS (0 , 0 , connect (3 , (struct sockaddr * )& server , sizeof (server )));
118
+ ASSERT_SYS (
119
+ 0 , sizeof (data ),
120
+ recvfrom (3 , & data , sizeof (data ), 0 , (struct sockaddr * )& addr , & addrsize ));
121
+ ASSERT_EQ (0 , addrsize );
122
+ EXPECT_SYS (0 , 0 , close (3 ));
123
+
124
+ ////////////////////////////////////////////////////////////////////////////////
125
+ PARENT ();
126
+ int client ;
127
+ struct sockaddr client_sockaddr ;
128
+ uint32_t sockaddr_size = sizeof (client_sockaddr );
129
+ ASSERT_NE (-1 , (client = accept (3 , & client_sockaddr , & sockaddr_size )));
130
+ ASSERT_SYS (0 , sizeof (client_sockaddr ),
131
+ sendto (client , & client_sockaddr , sizeof (client_sockaddr ), 0 ,
132
+ (struct sockaddr * )& server , sizeof (server )));
133
+ EXPECT_SYS (0 , 0 , close (client ));
134
+ WAIT (exit , 0 );
135
+ EXPECT_SYS (0 , 0 , close (3 ));
136
+ }
0 commit comments