Overhauled SSL to use explicit BIO buffers
This commit is contained in:
@@ -149,40 +149,42 @@ static SOCKET accept_on_socket(SOCKET listen_socket, std::string &err) {
|
||||
}
|
||||
}
|
||||
|
||||
// the return values for socket_send and socket_recv are:
|
||||
// the return values for socket_send:
|
||||
//
|
||||
// positive: sent or received bytes successfully
|
||||
// zero: would block
|
||||
// negative: channel closed, possibly cleanly or possibly with error
|
||||
// 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 < 0) {
|
||||
if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
|
||||
return 0;
|
||||
err.clear();
|
||||
} else {
|
||||
err = drvutil::strerror_str(errno);
|
||||
return -1;
|
||||
}
|
||||
return -1;
|
||||
} else {
|
||||
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) {
|
||||
if ((errno == EWOULDBLOCK) || (errno == EAGAIN)) {
|
||||
err = drvutil::strerror_str(errno);
|
||||
return -1;
|
||||
if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
|
||||
err.clear();
|
||||
} else {
|
||||
return 0;
|
||||
err = drvutil::strerror_str(errno);
|
||||
}
|
||||
} 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