You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.3 KiB
C++
63 lines
1.3 KiB
C++
#include "easysock.h"
|
|
#include <iostream>
|
|
|
|
/*
|
|
Server class - Defines a TCP/UDP server.
|
|
- The constructor takes in a **local** address and port, on which the server listens.
|
|
*/
|
|
|
|
class Server {
|
|
private:
|
|
int ip_ver;
|
|
char protocol;
|
|
int port;
|
|
int sock_fd;
|
|
std::string address;
|
|
|
|
void create_socket() {
|
|
struct sockaddr* dest = (struct sockaddr *)malloc(sizeof(struct sockaddr));
|
|
this->sock_fd = create_local(this->ip_ver, this->protocol, this->address.data(), this->port, dest);
|
|
}
|
|
|
|
public:
|
|
Server(int ip_ver, char protocol, int port) {
|
|
/* Error checking */
|
|
if (ip_ver != 4 && ip_ver != 6) {
|
|
throw std::invalid_argument("Invalid IP address type");
|
|
}
|
|
if (port < 1024 || port > 65535) {
|
|
throw std::invalid_argument("Invalid port");
|
|
}
|
|
if (protocol != 'T' && protocol != 'U') {
|
|
throw std::invalid_argument("Invalid protocol");
|
|
}
|
|
|
|
this->ip_ver = ip_ver;
|
|
this->protocol = protocol;
|
|
this->port = port;
|
|
if (ip_ver == 4) {
|
|
this->address = "127.0.0.1";
|
|
} else if (ip_ver == 6) {
|
|
this->address = "::1";
|
|
}
|
|
|
|
create_socket();
|
|
}
|
|
|
|
|
|
std::string recvAll() {
|
|
std::string string = std::string();
|
|
char* buffer = (char *)malloc(100);
|
|
while (recv(this->getSockFD(), buffer, 100, 0) != 0) {
|
|
string.append(std::string(buffer));
|
|
}
|
|
|
|
return string;
|
|
}
|
|
|
|
int getSockFD() {
|
|
return sock_fd;
|
|
}
|
|
|
|
};
|