Skip to content

Commit

Permalink
the listen callback shall also push socket and peer ip & port
Browse files Browse the repository at this point in the history
  • Loading branch information
timo committed Aug 11, 2017
1 parent 955a9cd commit cafe709
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/io/asyncsocket.c
Expand Up @@ -633,6 +633,33 @@ typedef struct {
int backlog;
} ListenInfo;


static void push_name_and_port(MVMThreadContext *tc, struct sockaddr_storage *name, MVMObject *arr) {
char addrstr[INET6_ADDRSTRLEN + 1];
in_port_t port;
MVMObject *host_o;
MVMObject *port_o;
switch (name->ss_family) {
case AF_INET6: {
uv_ip6_name((struct sockaddr_in6*)name, addrstr, INET6_ADDRSTRLEN + 1);
port = ((struct sockaddr_in6*)name)->sin6_port;
break;
}
case AF_INET: {
uv_ip4_name((struct sockaddr_in*)name, addrstr, INET6_ADDRSTRLEN + 1);
port = ((struct sockaddr_in*)name)->sin_port;
break;
}
}
MVMROOT(tc, arr, {
port_o = MVM_repr_box_int(tc, tc->instance->boot_types.BOOTInt, port);
MVMROOT(tc, port, {
host_o = (MVMObject *)MVM_string_ascii_decode_nt(tc, tc->instance->boot_types.BOOTStr, addrstr);
});
});
MVM_repr_push_o(tc, arr, host_o);
MVM_repr_push_o(tc, arr, port_o);
}
/* Handles an incoming connection. */
static void on_connection(uv_stream_t *server, int status) {
ListenInfo *li = (ListenInfo *)server->data;
Expand All @@ -654,8 +681,20 @@ static void on_connection(uv_stream_t *server, int status) {
data->handle = (uv_stream_t *)client;
result->body.ops = &op_table;
result->body.data = data;

MVM_repr_push_o(tc, arr, (MVMObject *)result);
MVM_repr_push_o(tc, arr, tc->instance->boot_types.BOOTStr);

MVMROOT(tc, result, {
struct sockaddr_storage sockaddr;
int name_len = sizeof(struct sockaddr_storage);

uv_tcp_getpeername(client, (struct sockaddr *)&sockaddr, &name_len);
push_name_and_port(tc, &sockaddr, arr);

uv_tcp_getsockname(client, (struct sockaddr *)&sockaddr, &name_len);
push_name_and_port(tc, &sockaddr, arr);
});
});
});
}
Expand Down

0 comments on commit cafe709

Please sign in to comment.