diff --git a/src/core/net.c b/src/core/net.c index 018a340c..dd36bcb7 100644 --- a/src/core/net.c +++ b/src/core/net.c @@ -649,7 +649,7 @@ struct sockaddr_in6 *sin6; // IPv6 address + port struct sockaddr_un *sun; // Unix Domain Socket Address */ -/* Turn a socket address into a host, port pair (port is optional). +/* Turn a socket address into a host, port pair. * For unix domain sockets, returned tuple will have only a single element, the path string. */ static Janet janet_so_getname(const void *sa_any) { const struct sockaddr *sa = sa_any; @@ -663,7 +663,7 @@ static Janet janet_so_getname(const void *sa_any) { janet_panic("unable to decode ipv4 host address"); } Janet pair[2] = {janet_cstringv(buffer), janet_wrap_integer(ntohs(sai->sin_port))}; - return janet_wrap_tuple(janet_tuple_n(pair, sai->sin_port ? 2 : 1)); + return janet_wrap_tuple(janet_tuple_n(pair, 2)); } case AF_INET6: { const struct sockaddr_in6 *sai6 = sa_any; @@ -671,7 +671,7 @@ static Janet janet_so_getname(const void *sa_any) { janet_panic("unable to decode ipv4 host address"); } Janet pair[2] = {janet_cstringv(buffer), janet_wrap_integer(ntohs(sai6->sin6_port))}; - return janet_wrap_tuple(janet_tuple_n(pair, sai6->sin6_port ? 2 : 1)); + return janet_wrap_tuple(janet_tuple_n(pair, 2)); } #ifndef JANET_WINDOWS case AF_UNIX: { @@ -695,6 +695,7 @@ JANET_CORE_FN(cfun_net_getsockname, "Gets the local address and port in a tuple in that order.") { janet_fixarity(argc, 1); JanetStream *js = janet_getabstract(argv, 0, &janet_stream_type); + if (js->flags & JANET_STREAM_CLOSED) janet_panic("stream closed"); struct sockaddr_storage ss; socklen_t slen = sizeof(ss); memset(&ss, 0, slen); @@ -710,6 +711,7 @@ JANET_CORE_FN(cfun_net_getpeername, "Gets the remote peer's address and port in a tuple in that order.") { janet_fixarity(argc, 1); JanetStream *js = janet_getabstract(argv, 0, &janet_stream_type); + if (js->flags & JANET_STREAM_CLOSED) janet_panic("stream closed"); struct sockaddr_storage ss; socklen_t slen = sizeof(ss); memset(&ss, 0, slen); diff --git a/src/core/run.c b/src/core/run.c index f90a640c..482bec36 100644 --- a/src/core/run.c +++ b/src/core/run.c @@ -79,9 +79,9 @@ int janet_dobytes(JanetTable *env, const uint8_t *bytes, int32_t len, const char const char *e = janet_parser_error(&parser); errflags |= 0x04; ret = janet_cstringv(e); - int32_t line = parser.line; - int32_t col = parser.column; - janet_eprintf("%s:%d:%d: parse error: %s\n", sourcePath, line, col, e); + size_t line = parser.line; + size_t col = parser.column; + janet_eprintf("%s:%lu:%lu: parse error: %s\n", sourcePath, line, col, e); done = 1; break; } diff --git a/test/suite0009.janet b/test/suite0009.janet index cb205cd2..eaa47c88 100644 --- a/test/suite0009.janet +++ b/test/suite0009.janet @@ -151,36 +151,35 @@ (:close s)) +(defn check-matching-names [stream] + (def [my-ip my-port] (net/localname stream)) + (def [remote-ip remote-port] (net/peername stream)) + (def msg (string my-ip " " my-port " " remote-ip " " remote-port)) + (def buf @"") + (ev/gather + (net/write stream msg) + (net/read stream 1024 buf)) + (def comparison (string/split " " buf)) + (assert (and (= my-ip (get comparison 2)) + (= (string my-port) (get comparison 3)) + (= remote-ip (get comparison 0)) + (= (string remote-port) (get comparison 1))) + "localname should match peername")) + +# Test on both server and client +(defn names-handler + [stream] + (defer (:close stream) + (check-matching-names stream))) + # Test localname and peername (repeat 20 - - (defn check-matching-names [stream] - (def [my-ip my-port] (net/localname stream)) - (def [remote-ip remote-port] (net/peername stream)) - (def msg (string my-ip " " my-port " " remote-ip " " remote-port)) - (def buf @"") - (ev/gather - (net/write stream msg) - (net/read stream 1024 buf)) - (def comparison (string/split " " buf)) - (assert (and (= my-ip (get comparison 2)) - (= (string my-port) (get comparison 3)) - (= remote-ip (get comparison 0)) - (= (string remote-port) (get comparison 1))) - "localname should match peername")) - - # Test on both server and client - (defn names-handler - [stream] - (defer (:close stream) - (check-matching-names stream))) (with [s (net/server "127.0.0.1" "8000" names-handler)] (defn test-names [] (with [conn (net/connect "127.0.0.1" "8000")] (check-matching-names conn))) (test-names) (test-names)) - (gccollect)) # Create pipe