Repository navigation
Expand file tree
/
Copy pathnetagent_c_linux.cpp
More file actions
58 lines (47 loc) · 1.58 KB
/
Copy pathnetagent_c_linux.cpp
File metadata and controls
58 lines (47 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "netagent.h"
NetClient::NetClient() = default;
NetClient::NetClient(string address, int port) {
if (init(address, port) == -1) {
cerr << "Failed to initialize client" << endl;
}
}
NetClient::~NetClient() {
closeConnection();
}
int NetClient::init(string address, int port) {
clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket == -1) {
cerr << "Failed to create socket" << endl;
return -1;
}
sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(port);
serverAddress.sin_addr.s_addr = address == "localhost" ? inet_addr("127.0.0.1") : inet_addr(address.c_str());
return connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress));
}
void NetClient::closeConnection() {
if (clientSocket != -1) {
close(clientSocket);
clientSocket = -1;
}
}
bool NetClient::isConnected() {
if (clientSocket == -1) return false;
int ret = send(clientSocket, nullptr, 0, MSG_NOSIGNAL);
return ret != -1 || errno != EPIPE;
}
int NetClient::sendData(const char *data, int len) {
return send(clientSocket, data, len, 0);
}
int NetClient::receiveData(char *data, int maxLen) { // Return from namespace NARETURN
int recvlen = recv(clientSocket, data, maxLen, 0);
if (recvlen == -1) {
cerr << "Failed to receive data from server" << endl;
return NARETURN::ERR;
} else if (recvlen == 0) {
cerr << "Connection closed by server" << endl;
return NARETURN::CONN_CLOSED_BY_PEER;
}
return recvlen;
}