From f7d73f1bf08aaca98e789a6d6c56d672cc0c4c9f Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 8 Jun 2021 18:25:36 +0800 Subject: import(life): ... --- works/life/computer-network-experiment/Common.cpp | 33 ++++++++++------------- 1 file changed, 14 insertions(+), 19 deletions(-) (limited to 'works/life/computer-network-experiment/Common.cpp') diff --git a/works/life/computer-network-experiment/Common.cpp b/works/life/computer-network-experiment/Common.cpp index ec6fd1a..1df4d56 100644 --- a/works/life/computer-network-experiment/Common.cpp +++ b/works/life/computer-network-experiment/Common.cpp @@ -1,6 +1,7 @@ #include "Common.h" #include "IO.h" +#include #ifdef WIN32 #include @@ -70,7 +71,7 @@ void BeforeExit() { SignalAndWaitForOutputThreadStop(); } -void SafeSend(int socket, std::string_view buffer) { +bool SafeSend(int socket, std::string_view buffer) { const int total_byte_count = buffer.size(); int byte_count_sent = 0; int retry_count = 0; @@ -78,55 +79,49 @@ void SafeSend(int socket, std::string_view buffer) { while (true) { // Now we have sent all data. if (byte_count_sent == total_byte_count) - break; + return true; auto byte_actually_sent = send(socket, buffer.data() + byte_count_sent, buffer.size() - byte_count_sent, 0); // send failed if (byte_actually_sent == -1) { - SendOutput(OutputType::Error, CRUT("Failed to send!\n")); - CloseSocket(socket); - break; + return false; } byte_count_sent += byte_actually_sent; } } -std::string SafeReadUntil(int socket, char c, std::string &rest) { - std::string result = rest; +bool SafeReadUntil(int socket, char c, std::string &data, std::string &rest) { + data = rest; const int buffer_size = 100; - char *buffer = new char[buffer_size]; + char buffer[buffer_size]; while (true) { int received_number = recv(socket, buffer, buffer_size, 0); if (received_number == -1) { - PrintErrorMessageAndExit(CRUT("Failed to recv.")); + return false; } - bool b = false; + bool end = false; for (int i = 0; i < received_number; i++) { if (buffer[i] == c) { - result.append(buffer, i); + data.append(buffer, i); rest = std::string(buffer + i + 1, received_number - i - 1); - b = true; + end = true; break; } } - if (b) - break; + if (end) + return true; - result.append(buffer, received_number); + data.append(buffer, received_number); } - - delete[] buffer; - - return result; } int main() { -- cgit v1.2.3