Try to always allocate enough size to store the remote address
This commit is contained in:
parent
10348d20cd
commit
87f24e174f
|
@ -303,9 +303,8 @@ static int _udp_callback_read(int fd, UDP * udp)
|
||||||
{
|
{
|
||||||
char buf[65536];
|
char buf[65536];
|
||||||
ssize_t ssize;
|
ssize_t ssize;
|
||||||
/* FIXME may not be the right type of struct sockaddr */
|
struct sockaddr * sa;
|
||||||
struct sockaddr_in sa;
|
socklen_t sa_len = udp->aip->ai_addrlen;
|
||||||
socklen_t sa_len;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s(%d)\n", __func__, fd);
|
fprintf(stderr, "DEBUG: %s(%d)\n", __func__, fd);
|
||||||
|
@ -313,11 +312,13 @@ static int _udp_callback_read(int fd, UDP * udp)
|
||||||
/* check arguments */
|
/* check arguments */
|
||||||
if(fd != udp->fd)
|
if(fd != udp->fd)
|
||||||
return -1;
|
return -1;
|
||||||
if((ssize = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&sa,
|
if((sa = malloc(sa_len)) == NULL)
|
||||||
&sa_len)) < 0)
|
return -_udp_error(NULL, 1);
|
||||||
|
if((ssize = recvfrom(fd, buf, sizeof(buf), 0, sa, &sa_len)) < 0)
|
||||||
{
|
{
|
||||||
/* XXX report error (and re-open the socket) */
|
/* XXX report error (and re-open the socket) */
|
||||||
error_set_code(1, "%s: %s", "recvfrom", strerror(errno));
|
_udp_error("recvfrom", 1);
|
||||||
|
free(sa);
|
||||||
close(udp->fd);
|
close(udp->fd);
|
||||||
udp->fd = -1;
|
udp->fd = -1;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -334,5 +335,6 @@ static int _udp_callback_read(int fd, UDP * udp)
|
||||||
fprintf(stderr, "DEBUG: %s() received message (%ld)\n", __func__,
|
fprintf(stderr, "DEBUG: %s() received message (%ld)\n", __func__,
|
||||||
ssize);
|
ssize);
|
||||||
#endif
|
#endif
|
||||||
|
free(sa);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user