diff options
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/doc-syms.tl | 1 | ||||
-rw-r--r-- | stdlib/socket.tl | 9 |
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))))) |