summaryrefslogtreecommitdiffstatshomepage
path: root/unix/modsocket.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-01-27 17:23:57 +0200
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-01-27 18:02:17 +0200
commitac37e0fd1fd5cce090035264ef4d7412735b9f7d (patch)
treee97d1e96624edebd3bd39c032d3eb43a1357512f /unix/modsocket.c
parent8f54c08691faa3dd859852d211230fd7d9791abd (diff)
downloadmicropython-ac37e0fd1fd5cce090035264ef4d7412735b9f7d.tar.gz
micropython-ac37e0fd1fd5cce090035264ef4d7412735b9f7d.zip
unix/modsocket: sockaddr(): Handle AF_INET6 addresses.
Diffstat (limited to 'unix/modsocket.c')
-rw-r--r--unix/modsocket.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/unix/modsocket.c b/unix/modsocket.c
index 9caccb2874..b5a6041b16 100644
--- a/unix/modsocket.c
+++ b/unix/modsocket.c
@@ -521,6 +521,16 @@ STATIC mp_obj_t mod_socket_sockaddr(mp_obj_t sockaddr_in) {
t->items[2] = MP_OBJ_NEW_SMALL_INT(ntohs(sa->sin_port));
return MP_OBJ_FROM_PTR(t);
}
+ case AF_INET6: {
+ struct sockaddr_in6 *sa = (struct sockaddr_in6*)bufinfo.buf;
+ mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(5, NULL));
+ t->items[0] = MP_OBJ_NEW_SMALL_INT(AF_INET6);
+ t->items[1] = mp_obj_new_bytes((byte*)&sa->sin6_addr, sizeof(sa->sin6_addr));
+ t->items[2] = MP_OBJ_NEW_SMALL_INT(ntohs(sa->sin6_port));
+ t->items[3] = MP_OBJ_NEW_SMALL_INT(ntohl(sa->sin6_flowinfo));
+ t->items[4] = MP_OBJ_NEW_SMALL_INT(ntohl(sa->sin6_scope_id));
+ return MP_OBJ_FROM_PTR(t);
+ }
default: {
struct sockaddr *sa = (struct sockaddr*)bufinfo.buf;
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL));