@@ -74,29 +74,33 @@ TEST_F(SocketFdTest, InvalidFileDescriptor)
7474
7575TEST_F (SocketFdTest, EmptyAncillaryData)
7676{
77- if (fork () == 0 ) {
77+ auto child = fork ();
78+ ASSERT_NE (child, -1 );
79+ if (child == 0 ) {
7880 close (sv[1 ]);
7981 std::string data = " just-text-no-fd" ;
8082 ASSERT_NE (write (sv[0 ], data.data (), data.size ()), -1 );
8183 close (sv[0 ]);
82- _exit (0 );
84+ _exit (EXIT_SUCCESS );
8385 }
8486
8587 close (sv[0 ]);
8688 auto res = recvFdWithPayload (sv[1 ], 1024 );
8789 EXPECT_FALSE (res.has_value ());
88- wait ( nullptr );
90+ waitpid (child, nullptr , 0 );
8991}
9092
9193TEST_F (SocketFdTest, PayloadBufferTruncation)
9294{
9395 const std::string long_payload (200 , ' Z' );
94- if (fork () == 0 ) {
96+ auto child = fork ();
97+ ASSERT_NE (child, -1 );
98+ if (child == 0 ) {
9599 close (sv[1 ]);
96100 auto ret = sendFdWithPayload (sv[0 ], STDOUT_FILENO , long_payload);
97101 EXPECT_TRUE (ret) << ret.error ();
98102 close (sv[0 ]);
99- _exit (0 );
103+ _exit (EXIT_SUCCESS );
100104 }
101105 close (sv[0 ]);
102106
@@ -109,23 +113,28 @@ TEST_F(SocketFdTest, PayloadBufferTruncation)
109113 close (res->fd );
110114 }
111115
112- wait ( nullptr );
116+ waitpid (child, nullptr , 0 );
113117}
114118
115119TEST_F (SocketFdTest, SignalInterruptionRecovery)
116120{
117- auto handler = signal (SIGUSR1 , [](int ) { });
118- ASSERT_NE (handler, SIG_ERR );
119-
120- if (fork () == 0 ) {
121+ struct sigaction sa{};
122+ sa.sa_handler = []([[maybe_unused]] int sig) -> void { };
123+ sigemptyset (&sa.sa_mask );
124+ struct sigaction oldsa{};
125+ ASSERT_NE (-1 , sigaction (SIGUSR1 , &sa, &oldsa));
126+
127+ auto child = fork ();
128+ ASSERT_NE (child, -1 );
129+ if (child == 0 ) {
121130 close (sv[1 ]);
122131 usleep (50000 );
123132 kill (getppid (), SIGUSR1 );
124133 usleep (50000 );
125134 auto ret = sendFdWithPayload (sv[0 ], STDERR_FILENO , " recovered" );
126135 EXPECT_TRUE (ret) << ret.error ();
127136 close (sv[0 ]);
128- _exit (0 );
137+ _exit (EXIT_SUCCESS );
129138 }
130139
131140 close (sv[0 ]);
@@ -137,22 +146,24 @@ TEST_F(SocketFdTest, SignalInterruptionRecovery)
137146 close (res->fd );
138147 }
139148
140- wait ( nullptr );
149+ waitpid (child, nullptr , 0 );
141150
142- ASSERT_NE (signal (SIGUSR1 , handler), SIG_ERR );
151+ ASSERT_NE (- 1 , sigaction (SIGUSR1 , &oldsa, nullptr ) );
143152}
144153
145154TEST_F (SocketFdTest, PeerClosedBeforeSending)
146155{
147- if (fork () == 0 ) {
156+ auto child = fork ();
157+ ASSERT_NE (child, -1 );
158+ if (child == 0 ) {
148159 close (sv[1 ]);
149160 close (sv[0 ]);
150- _exit (0 );
161+ _exit (EXIT_SUCCESS );
151162 }
152163 close (sv[0 ]);
153164 auto res = recvFdWithPayload (sv[1 ], 1024 );
154165 EXPECT_FALSE (res.has_value ());
155- wait ( nullptr );
166+ waitpid (child, nullptr , 0 );
156167}
157168
158169TEST_F (SocketFdTest, SendInvalidFdHandle)
@@ -164,11 +175,12 @@ TEST_F(SocketFdTest, SendInvalidFdHandle)
164175TEST_F (SocketFdTest, LargePayloadHandling)
165176{
166177 const std::string large_payload (65536 , ' B' );
167- if (fork () == 0 ) {
178+ auto child = fork ();
179+ if (child == 0 ) {
168180 close (sv[1 ]);
169181 auto ret = sendFdWithPayload (sv[0 ], STDIN_FILENO , large_payload);
170182 close (sv[0 ]);
171- _exit (0 );
183+ _exit (EXIT_SUCCESS );
172184 }
173185 close (sv[0 ]);
174186 auto res = recvFdWithPayload (sv[1 ], 70000 );
@@ -179,5 +191,5 @@ TEST_F(SocketFdTest, LargePayloadHandling)
179191 close (res->fd );
180192 }
181193
182- wait ( nullptr );
194+ waitpid (child, nullptr , 0 );
183195}
0 commit comments