Previously we would just keep trying to read from it and consume all CPU.
Fixes: 389 (hopefully)
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
}
pkt = vpninfo->dtls_pkt;
len = recv(vpninfo->dtls_fd, (void *)&pkt->esp, len + sizeof(pkt->esp), 0);
- if (len <= 0)
- break;
+ if (len <= 0) {
+ if (!len || errno == EAGAIN || errno == EWOULDBLOCK)
+ break;
+
+ /* On *real* errors, close the UDP socket and try again later. */
+ vpn_perror(vpninfo, "ESP recv()");
+ vpninfo->proto->udp_close(vpninfo);
+ return 0;
+ }
work_done = 1;