summaryrefslogtreecommitdiffstats
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/doc-syms.tl1
-rw-r--r--stdlib/socket.tl9
2 files changed, 10 insertions, 0 deletions
diff --git a/stdlib/doc-syms.tl b/stdlib/doc-syms.tl
index e9685e70..7d8c30b9 100644
--- a/stdlib/doc-syms.tl
+++ b/stdlib/doc-syms.tl
@@ -1829,6 +1829,7 @@
("sockaddr" "N-02C48759")
("sockaddr-in" "N-01DD05D9")
("sockaddr-in6" "N-013DD169")
+ ("sockaddr-str" "N-0370C05F")
("sockaddr-un" "N-01DD05D2")
("socklen-t" "N-01153D9E")
("sol-socket" "N-031C01CB")
diff --git a/stdlib/socket.tl b/stdlib/socket.tl
index 80a60ec5..af4aca4e 100644
--- a/stdlib/socket.tl
+++ b/stdlib/socket.tl
@@ -279,3 +279,12 @@
(,setter (val)
^(sock-set-opt ,',sock ,',level ,',option ,val ,',type)))
,body)))
+
+(defun sockaddr-str (str)
+ (cond
+ ((starts-with "[" str) (in6addr-str str))
+ ((starts-with "/" str) (new sockaddr-un path str))
+ ((contains "::" str) (in6addr-str str))
+ ((contains "." str) (inaddr-str str))
+ (t (or (ignerr (in6addr-str str))
+ (inaddr-str str)))))