sock: Add handling for want read/write

This commit is contained in:
2024-02-06 23:33:24 +01:00
parent 90b20d40d8
commit b26e80f18a

View File

@ -211,8 +211,15 @@ long sock_send(sock *s, void *buf, unsigned long len, int flags) {
long ret;
if (s->enc) {
ret = SSL_write(s->ssl, buf, (int) len);
if (ret <= 0) sock_error(s, (int) ret);
while (1) {
ret = SSL_write(s->ssl, buf, (int) len);
if (ret <= 0) {
sock_error(s, (int) ret);
if (error_get_ssl() == SSL_ERROR_WANT_WRITE)
continue;
}
break;
}
} else if (s->pipe) {
if (flags & ~MSG_MORE) {
errno = EINVAL;
@ -255,8 +262,15 @@ long sock_recv(sock *s, void *buf, unsigned long len, int flags) {
long ret;
if (s->enc) {
int (*func)(SSL *, void *, int) = (flags & MSG_PEEK) ? SSL_peek : SSL_read;
ret = func(s->ssl, buf, (int) len);
if (ret <= 0) sock_error(s, (int) ret);
while (1) {
ret = func(s->ssl, buf, (int) len);
if (ret <= 0) {
sock_error(s, (int) ret);
if (error_get_ssl() == SSL_ERROR_WANT_READ)
continue;
}
break;
}
} else if (s->pipe) {
if (flags & ~MSG_WAITALL) {
errno = EINVAL;