tcp net wip
This commit is contained in:
@@ -71,10 +71,7 @@ int TcpNet::server(int portno, const std::function<std::pair<bool, std::string>(
|
||||
shutdown = response.first;
|
||||
std::string response_str = response.second;
|
||||
|
||||
auto response_len = response_str.size();
|
||||
auto n = write(newsockfd, response_str.c_str(), response_len);
|
||||
if (n < 0 || response_len != n)
|
||||
error("ERROR writing to socket");
|
||||
write_to_socket(newsockfd, response_str);
|
||||
|
||||
requests_processed++;
|
||||
}
|
||||
@@ -134,10 +131,20 @@ std::string TcpNet::client(const std::string &address, int portno, const std::st
|
||||
return response[0];
|
||||
}
|
||||
|
||||
|
||||
std::string TcpNet::read_from_socket(int sockfd) {
|
||||
char buffer[TCPNET_BUFFER_SIZE];
|
||||
std::string request;
|
||||
|
||||
// read length header
|
||||
unsigned long long bytesLen = 0;
|
||||
if (USE_LENGTH_HEADER) {
|
||||
long n = read(sockfd, &bytesLen, sizeof(bytesLen));
|
||||
if (n != 0 && n != sizeof(bytesLen))
|
||||
error("ERROR reading length header failed");
|
||||
}
|
||||
|
||||
// read data
|
||||
long n;
|
||||
do {
|
||||
memset(buffer, 0, TCPNET_BUFFER_SIZE);
|
||||
@@ -153,7 +160,7 @@ std::string TcpNet::read_from_socket(int sockfd) {
|
||||
|
||||
std::string part{buffer};
|
||||
request.append(part);
|
||||
} while (n == TCPNET_BUFFER_SIZE - 1); // TODO what if data exactly of this size
|
||||
} while ((USE_LENGTH_HEADER && n < bytesLen) || n == TCPNET_BUFFER_SIZE - 1); // TODO what if data exactly of this size
|
||||
|
||||
return request;
|
||||
}
|
||||
@@ -162,6 +169,16 @@ void TcpNet::write_to_socket(int sockfd, const std::string &str) {
|
||||
const char *buffer = str.c_str();
|
||||
int pos = 0;
|
||||
long n;
|
||||
|
||||
// write length header
|
||||
unsigned long long bytesLen = str.length();
|
||||
if (USE_LENGTH_HEADER) {
|
||||
n = write(sockfd, &bytesLen, (int) sizeof(bytesLen));
|
||||
if (n < 0)
|
||||
error("ERROR writing size number to socket");
|
||||
}
|
||||
|
||||
// write data
|
||||
do {
|
||||
n = write(sockfd, buffer + pos, (int) (str.length() - pos));
|
||||
if (n < 0)
|
||||
|
||||
Reference in New Issue
Block a user