This commit is contained in:
2023-04-03 13:18:55 -04:00
35 changed files with 1234 additions and 686 deletions

View File

@@ -152,37 +152,46 @@ static SOCKET accept_on_socket(SOCKET listen_socket, std::string &err) {
}
}
// the return values for socket_send:
//
// positive: sent bytes successfully
// negative: error.
// If the error message is empty, then it's "would block"
// Any other error generates an error message.
//
static int socket_send(SOCKET socket, const char *bytes, int nbytes, std::string &err) {
err.clear();
int wbytes = send(socket, bytes, nbytes, 0);
if (wbytes == SOCKET_ERROR) {
int errcode = WSAGetLastError();
if (errcode == WSAEWOULDBLOCK) {
return 0;
err.clear();
} else {
err = "send failure";
return -1;
}
return -1;
} else {
assert(wbytes > 0);
err.clear();
return wbytes;
}
}
static int socket_recv(SOCKET socket, char *bytes, int nbytes, std::string &err) {
err.clear();
int nrecv = recv(socket, bytes, nbytes, 0);
if (nrecv < 0) {
int errcode = WSAGetLastError();
if (errcode == WSAEWOULDBLOCK) {
return 0;
err = "";
} else {
err = "recv failure";
return -1;
}
} else if (nrecv == 0) {
return -1;
} else if (nrecv == 0) {
err.clear();
return 0;
} else {
err.clear();
return nrecv;
}
}