Fix EINTR handling
This commit is contained in:
@@ -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();
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user