From 7a269e185fc59e5f81e7c91e6e75891ba2ca4b3b Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 6 Jun 2021 23:43:52 +0800 Subject: import(life): ... --- works/life/computer-network-experiment/Common.cpp | 13 +++++++++++++ works/life/computer-network-experiment/Common.h | 8 +++++--- works/life/computer-network-experiment/client.cpp | 11 ++++++++--- works/life/computer-network-experiment/server.cpp | 23 ++++++++++++++--------- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/works/life/computer-network-experiment/Common.cpp b/works/life/computer-network-experiment/Common.cpp index 2e01dcb..59c2f0f 100644 --- a/works/life/computer-network-experiment/Common.cpp +++ b/works/life/computer-network-experiment/Common.cpp @@ -5,6 +5,11 @@ #ifdef WIN32 #include #include +#else +#include +#include +#include +#include #endif [[noreturn]] void PrintErrorMessageAndExit(StringView message, @@ -46,6 +51,14 @@ void InitWSA() { } #endif +int Close(int socket) { +#ifdef WIN32 + return closesocket(socket); +#else + return close(socket); +#endif +} + int main() { #ifdef WIN32 InitWSA(); diff --git a/works/life/computer-network-experiment/Common.h b/works/life/computer-network-experiment/Common.h index 45a7da1..4e30439 100644 --- a/works/life/computer-network-experiment/Common.h +++ b/works/life/computer-network-experiment/Common.h @@ -14,8 +14,6 @@ inline auto &output_stream = std::wcout; inline auto &error_stream = std::wcerr; #define CRUT(string_literal) L##string_literal -int Main(); - inline String ConvertCharString(std::string_view s) { return cru::ToUtf16WString(s); } @@ -28,12 +26,16 @@ inline auto &output_stream = std::cout; inline auto &error_stream = std::cerr; #define CRUT(string_literal) string_literal -inline String ConvertCharString(std::string_view s) { return s; } +inline String ConvertCharString(std::string_view s) { return String(s); } #endif +int Main(); + [[noreturn]] void PrintErrorMessageAndExit(StringView message, bool print_last_error = true); #ifdef WIN32 void InitWSA(); #endif + +int Close(int socket); diff --git a/works/life/computer-network-experiment/client.cpp b/works/life/computer-network-experiment/client.cpp index aeb352f..f209171 100644 --- a/works/life/computer-network-experiment/client.cpp +++ b/works/life/computer-network-experiment/client.cpp @@ -8,6 +8,11 @@ #ifdef WIN32 #include #include +#else +#include +#include +#include + #endif const auto connect_address = "127.0.0.1"; // control connect address @@ -16,7 +21,7 @@ const u_short port = 1234; // control connect port int Main() { int client_socket; - if ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { + if ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) { PrintErrorMessageAndExit(CRUT("Failed to create socket!\n")); } @@ -28,7 +33,7 @@ int Main() { memset(&(server_address.sin_zero), 0, sizeof(server_address.sin_zero)); if (connect(client_socket, (sockaddr *)&server_address, sizeof(sockaddr)) == - SOCKET_ERROR) { + -1) { PrintErrorMessageAndExit(CRUT("Failed to connect!")); } @@ -45,6 +50,6 @@ int Main() { SendOutput(CRUT("Received message:\n")); - closesocket(client_socket); + Close(client_socket); return 0; } diff --git a/works/life/computer-network-experiment/server.cpp b/works/life/computer-network-experiment/server.cpp index 9cf655a..ff03783 100644 --- a/works/life/computer-network-experiment/server.cpp +++ b/works/life/computer-network-experiment/server.cpp @@ -11,6 +11,11 @@ #ifdef WIN32 #include #include +#else +#include +#include +#include + #endif const auto bind_address = "127.0.0.1"; // control bind address @@ -35,9 +40,9 @@ void ResponseThreadProc(int socket, sockaddr_in address) { buffer.size() - byte_count_sent, 0); // send failed - if (byte_actually_sent == SOCKET_ERROR) { - std::cerr << "Failed to send!\n"; - closesocket(socket); + if (byte_actually_sent == -1) { + SendOutput(OutputType::Error, CRUT("Failed to send!\n")); + Close(socket); break; } @@ -47,13 +52,13 @@ void ResponseThreadProc(int socket, sockaddr_in address) { SendOutput(CRUT("Succeeded to send message to {} !\n"), ConvertCharString(address_string)); - closesocket(socket); + Close(socket); } int Main() { int server_socket; - if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { + if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) { PrintErrorMessageAndExit(CRUT("Failed to create socket.")); } @@ -65,23 +70,23 @@ int Main() { memset(&(server_address.sin_zero), 0, sizeof(server_address.sin_zero)); if (bind(server_socket, reinterpret_cast(&server_address), - sizeof(sockaddr_in)) == SOCKET_ERROR) { + sizeof(sockaddr_in)) == -1) { PrintErrorMessageAndExit(CRUT("Failed to bind.")); } - if (listen(server_socket, SOMAXCONN) == SOCKET_ERROR) { + if (listen(server_socket, SOMAXCONN) == -1) { PrintErrorMessageAndExit(CRUT("Failed to listen.")); } while (true) { sockaddr_in client_address; int client_socket; - int sin_size = sizeof(sockaddr_in); + unsigned sin_size = sizeof(sockaddr_in); client_socket = accept(server_socket, reinterpret_cast(&client_address), &sin_size); - if (client_socket == INVALID_SOCKET) { + if (client_socket == -1) { PrintErrorMessageAndExit(CRUT("Failed to accecpt")); } -- cgit v1.2.3