mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
sockets: MSG_WAITALL support
This commit is contained in:
@@ -1345,9 +1345,15 @@ static int tcp_recv(socket_t *socket, sockaddr_t *addr, void *buffer, size_t cou
|
||||
int revents = internalpoll(tcb, &desc.data[0], POLLIN);
|
||||
|
||||
if (revents) {
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
break;
|
||||
if ((revents & POLLHUP) == 0 && (flags & SOCKET_RECV_FLAGS_WAITALL) &&
|
||||
(flags & SOCKET_RECV_FLAGS_PEEK) == 0 && RINGBUFFER_DATACOUNT(&tcb->receivebuffer) < count) {
|
||||
// wait for more data (WAITALL is set)
|
||||
poll_add(&socket->pollheader, &desc.data[0], POLLIN);
|
||||
} else {
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
|
||||
Reference in New Issue
Block a user