fix: handle plain HTTP on sslWriteAll
This commit is contained in:
@@ -108,26 +108,45 @@ bool sslWriteAll(WOLFSSL* ssl, const void* data, int len, SOCKET s)
|
|||||||
int sent = 0;
|
int sent = 0;
|
||||||
while (sent < len)
|
while (sent < len)
|
||||||
{
|
{
|
||||||
int ret = wolfSSL_write(ssl, (const char*)data + sent, len - sent);
|
int ret;
|
||||||
if (ret > 0)
|
if (ssl)
|
||||||
|
{
|
||||||
|
ret = wolfSSL_write(ssl, (const char*)data + sent, len - sent);
|
||||||
|
if (ret <= 0)
|
||||||
{
|
{
|
||||||
sent += ret;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int err = wolfSSL_get_error(ssl, ret);
|
int err = wolfSSL_get_error(ssl, ret);
|
||||||
if (err == WOLFSSL_ERROR_WANT_READ || err == WOLFSSL_ERROR_WANT_WRITE)
|
if (err == WOLFSSL_ERROR_WANT_READ || err == WOLFSSL_ERROR_WANT_WRITE)
|
||||||
{
|
{
|
||||||
fd_set fds;
|
fd_set fds;
|
||||||
FD_ZERO(&fds);
|
FD_ZERO(&fds);
|
||||||
FD_SET(s, &fds);
|
FD_SET(s, &fds);
|
||||||
struct timeval tv{0, 10000}; // 10ms wait
|
struct timeval tv{0, 10000};
|
||||||
select(0, (err == WOLFSSL_ERROR_WANT_READ) ? &fds : nullptr,
|
select(0, (err == WOLFSSL_ERROR_WANT_READ) ? &fds : nullptr,
|
||||||
(err == WOLFSSL_ERROR_WANT_WRITE) ? &fds : nullptr, nullptr, &tv);
|
(err == WOLFSSL_ERROR_WANT_WRITE) ? &fds : nullptr, nullptr, &tv);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = ::send(s, (const char*)data + sent, len - sent, 0);
|
||||||
|
if (ret <= 0)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (ret < 0 && WSAGetLastError() == WSAEWOULDBLOCK)
|
||||||
|
#else
|
||||||
|
if (ret < 0 && (errno == EWOULDBLOCK || errno == EAGAIN))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sent += ret;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user