Fix EINTR handling

This commit is contained in:
2025-08-23 17:28:34 -04:00
parent 5b4a28a8ca
commit a820efa2e6
6 changed files with 131 additions and 24 deletions

View File

@@ -69,12 +69,18 @@ TEST_CASE(
// Write some test data
const char *test_message = "Hello, World!";
ssize_t bytes_written = write(client_fd, test_message, strlen(test_message));
ssize_t bytes_written;
do {
bytes_written = write(client_fd, test_message, strlen(test_message));
} while (bytes_written == -1 && errno == EINTR);
REQUIRE(bytes_written == strlen(test_message));
// Read the echoed response
char buffer[1024] = {0};
ssize_t bytes_read = read(client_fd, buffer, sizeof(buffer) - 1);
ssize_t bytes_read;
do {
bytes_read = read(client_fd, buffer, sizeof(buffer) - 1);
} while (bytes_read == -1 && errno == EINTR);
if (bytes_read == -1) {
perror("read failed");
}
@@ -84,7 +90,10 @@ TEST_CASE(
CHECK(std::string(buffer, bytes_read) == std::string(test_message));
// Cleanup
close(client_fd);
int e;
do {
e = close(client_fd);
} while (e == -1 && errno == EINTR);
server->shutdown();
server_thread.join();
{