From 69e70eb206cc8c26ebed045b37d0d2be51677775 Mon Sep 17 00:00:00 2001 From: Aadhavan Srinivasan Date: Wed, 28 Feb 2024 00:05:53 -0500 Subject: [PATCH] Changed the recvAll return type from std::string to char pointer, and created a non-blocking version of the function --- client.cpp | 16 ++++++++++++++-- includes/client.hpp | 5 ++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/client.cpp b/client.cpp index c4de08d..bf5f665 100644 --- a/client.cpp +++ b/client.cpp @@ -16,7 +16,7 @@ address specified in the constructor, and will throw an exception if that fails. The exception thrown is an integer, that corresponds to the errno returned by the failing function. This enables a client to 'catch' the thrown exception, and print the corresponding error message using strerror(). -*/ +This function also sets a timeout of 100ms for UDP sockets. */ void Client::create_socket() { Sock::create_socket(); @@ -24,6 +24,12 @@ void Client::create_socket() { if (this->sock_fd < 0) { throw (this->sock_fd * -1); } +// if (protocol == ES_UDP) { +// struct timeval tv; +// tv.tv_sec = 0; +// tv.tv_usec = 10000; +// setsockopt(this->sock_fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); +// } } /* Sends given data to the peer socket. This method is overriden, because a TCP @@ -39,11 +45,17 @@ void Client::sendAll(std::string to_send) { /* Receives data from peer socket, and returns it. See above for better explanation of why this method is overriden. */ -std::string Client::recvAll() { +char* Client::recvAll() { this->other_socket = this->sock_fd; return Sock::recvAll(); } +/* Same as function above, but calls Sock::recvAllNB() */ +char* Client::recvAllNB() { + this->other_socket = this->sock_fd; + return Sock::recvAllNB(); +} + /* Returns the type of socket based on the global constants set in sock.hpp */ int Client::get_type() { return SOCK_CLIENT; diff --git a/includes/client.hpp b/includes/client.hpp index eb1dd7d..3c01942 100644 --- a/includes/client.hpp +++ b/includes/client.hpp @@ -21,7 +21,10 @@ public: void sendAll(std::string to_send); - std::string recvAll(); + char* recvAll(); + + /* Non-blocking receive */ + char* recvAllNB(); /* Return the type of socket */ int get_type() override;