summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-01-21 23:53:47 +0200
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-01-21 23:55:20 +0200
commitcb4fbc8861c2f0da494bf182e58d0e453c474856 (patch)
tree9fcdadd5ffee3c860cbd6e08380cd502dabe986b
parentf22844b4e5d1990f3be5433a45c7eb4e2c07a297 (diff)
downloadmicropython-cb4fbc8861c2f0da494bf182e58d0e453c474856.tar.gz
micropython-cb4fbc8861c2f0da494bf182e58d0e453c474856.zip
unix/modsocket: accept(): Make IPv6-clean.
By reserving enough space for peer address.
-rw-r--r--unix/modsocket.c6
1 files 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));