From a2a06d43f239933f0961ee903a167ae149b02606 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Sat, 15 Sep 2018 17:54:58 +0200 Subject: [PATCH] Fix connectUnix/bindUnix with abstract socket paths The only way to make this work for both abstract and non-abstract sockets is to send the kernel an incomplete structure. Reported by Epictek on the forum. --- lib/posix/posix_other.nim | 2 +- lib/pure/net.nim | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/posix/posix_other.nim b/lib/posix/posix_other.nim index 99d67824e6..ba1dd89ede 100644 --- a/lib/posix/posix_other.nim +++ b/lib/posix/posix_other.nim @@ -410,7 +410,7 @@ else: type Socklen* {.importc: "socklen_t", header: "".} = cuint - TSa_Family* {.importc: "sa_family_t", header: "".} = cint + TSa_Family* {.importc: "sa_family_t", header: "".} = cushort SockAddr* {.importc: "struct sockaddr", header: "", pure, final.} = object ## struct sockaddr diff --git a/lib/pure/net.nim b/lib/pure/net.nim index a60137dab4..67cb95e2f9 100644 --- a/lib/pure/net.nim +++ b/lib/pure/net.nim @@ -964,7 +964,7 @@ when defined(posix) or defined(nimdoc): when not defined(nimdoc): var socketAddr = makeUnixAddr(path) if socket.fd.connect(cast[ptr SockAddr](addr socketAddr), - sizeof(socketAddr).Socklen) != 0'i32: + (sizeof(socketAddr.sun_family) + path.len).Socklen) != 0'i32: raiseOSError(osLastError()) proc bindUnix*(socket: Socket, path: string) = @@ -973,7 +973,7 @@ when defined(posix) or defined(nimdoc): when not defined(nimdoc): var socketAddr = makeUnixAddr(path) if socket.fd.bindAddr(cast[ptr SockAddr](addr socketAddr), - sizeof(socketAddr).Socklen) != 0'i32: + (sizeof(socketAddr.sun_family) + path.len).Socklen) != 0'i32: raiseOSError(osLastError()) when defined(ssl):