Overhauled SSL to use explicit BIO buffers
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user