Changed the recvAll return type from std::string to char pointer, and created a non-blocking version of the function
This commit is contained in:
		
							
								
								
									
										16
									
								
								client.cpp
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								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
 | 
					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
 | 
					function. This enables a client to 'catch' the thrown exception, and print the corresponding
 | 
				
			||||||
error message using strerror().
 | 
					error message using strerror().
 | 
				
			||||||
*/
 | 
					This function also sets a timeout of 100ms for UDP sockets. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Client::create_socket() {
 | 
					void Client::create_socket() {
 | 
				
			||||||
	Sock::create_socket();
 | 
						Sock::create_socket();
 | 
				
			||||||
@@ -24,6 +24,12 @@ void Client::create_socket() {
 | 
				
			|||||||
	if (this->sock_fd < 0) {
 | 
						if (this->sock_fd < 0) {
 | 
				
			||||||
			throw (this->sock_fd * -1);
 | 
								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
 | 
					/* 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
 | 
					/* Receives data from peer socket, and returns it. See above for better
 | 
				
			||||||
explanation of why this method is overriden. */
 | 
					explanation of why this method is overriden. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
std::string Client::recvAll() {
 | 
					char* Client::recvAll() {
 | 
				
			||||||
	this->other_socket = this->sock_fd;
 | 
						this->other_socket = this->sock_fd;
 | 
				
			||||||
	return Sock::recvAll();
 | 
						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 */
 | 
					/* Returns the type of socket based on the global constants set in sock.hpp */
 | 
				
			||||||
int Client::get_type() {
 | 
					int Client::get_type() {
 | 
				
			||||||
	return SOCK_CLIENT;
 | 
						return SOCK_CLIENT;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,10 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	void sendAll(std::string to_send);
 | 
						void sendAll(std::string to_send);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	std::string recvAll();
 | 
						char* recvAll();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* Non-blocking receive */
 | 
				
			||||||
 | 
						char* recvAllNB();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Return the type of socket */
 | 
						/* Return the type of socket */
 | 
				
			||||||
	int get_type() override;
 | 
						int get_type() override;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user