socket: process all message headers

If multiple messages were received, don't stop their processing if some
header fails.

Fixes: 86a3ef9ed1 ("socket: add new socket support")
This commit is contained in:
Miroslav Lichvar 2020-10-05 09:51:52 +02:00
parent 473cb3c968
commit 6e71e902c8

View file

@ -909,7 +909,7 @@ receive_messages(int sock_fd, int flags, int max_messages, int *num_messages)
{ {
struct MessageHeader *hdr; struct MessageHeader *hdr;
SCK_Message *messages; SCK_Message *messages;
unsigned int i, n; unsigned int i, n, n_ok;
int ret, recv_flags = 0; int ret, recv_flags = 0;
assert(initialised); assert(initialised);
@ -953,18 +953,20 @@ receive_messages(int sock_fd, int flags, int max_messages, int *num_messages)
received_messages = n; received_messages = n;
for (i = 0; i < n; i++) { for (i = n_ok = 0; i < n; i++) {
hdr = ARR_GetElement(recv_headers, i); hdr = ARR_GetElement(recv_headers, i);
if (!process_header(&hdr->msg_hdr, hdr->msg_len, sock_fd, flags, &messages[i])) if (!process_header(&hdr->msg_hdr, hdr->msg_len, sock_fd, flags, &messages[n_ok]))
return NULL; continue;
log_message(sock_fd, 1, &messages[i], log_message(sock_fd, 1, &messages[n_ok],
flags & SCK_FLAG_MSG_ERRQUEUE ? "Received error" : "Received", NULL); flags & SCK_FLAG_MSG_ERRQUEUE ? "Received error" : "Received", NULL);
n_ok++;
} }
*num_messages = n; *num_messages = n_ok;
return messages; return n_ok > 0 ? messages : NULL;
} }
/* ================================================== */ /* ================================================== */