-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathTcpServer.cpp
More file actions
57 lines (44 loc) · 1.3 KB
/
TcpServer.cpp
File metadata and controls
57 lines (44 loc) · 1.3 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
#include "TcpServer.h"
#include <iostream>
const uint16_t TcpServer::port = 8080;
TcpServer::TcpServer() {
socketFd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (socketFd == -1) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
sockaddr_in st_sock_addr;
std::memset(&st_sock_addr, 0, sizeof st_sock_addr);
st_sock_addr.sin_family = AF_INET;
st_sock_addr.sin_port = htons(port);
st_sock_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(socketFd, (const sockaddr *)&st_sock_addr, sizeof st_sock_addr) == -1) {
perror("bind failed");
close(socketFd);
exit(EXIT_FAILURE);
}
if (::listen(socketFd, 10) == -1) {
perror("listen failed");
close(socketFd);
exit(EXIT_FAILURE);
}
}
TcpServer::~TcpServer() {
}
int TcpServer::listen() const {
int client_fd = accept(socketFd, NULL, NULL);
if (client_fd < 0) {
perror("accept failed");
close(socketFd);
exit(EXIT_FAILURE);
}
return client_fd;
}
std::string TcpServer::getRequest(int clientFd) const {
return httpRead(clientFd);
}
void TcpServer::sendResponse(int clientFd, std::string response) const {
write(clientFd, response.c_str(), response.size());
shutdown(clientFd, SHUT_RDWR);
close(clientFd);
}