From cb4fbc8861c2f0da494bf182e58d0e453c474856 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Jan 2016 23:53:47 +0200 Subject: [PATCH] unix/modsocket: accept(): Make IPv6-clean. By reserving enough space for peer address. --- unix/modsocket.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/unix/modsocket.c b/unix/modsocket.c index dd535d2bce..9caccb2874 100644 --- a/unix/modsocket.c +++ b/unix/modsocket.c @@ -155,9 +155,11 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_listen_obj, socket_listen); STATIC mp_obj_t socket_accept(mp_obj_t self_in) { mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); - struct sockaddr addr; + // sockaddr_storage isn't stack-friendly (129 bytes or so) + //struct sockaddr_storage addr; + byte addr[32]; socklen_t addr_len = sizeof(addr); - int fd = accept(self->fd, &addr, &addr_len); + int fd = accept(self->fd, (struct sockaddr*)&addr, &addr_len); RAISE_ERRNO(fd, errno); mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL));