Skip to content

Commit 30263ee

Browse files
committed
Make bindSocket available for windows
1 parent 3b8460f commit 30263ee

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

Diff for: chronos/transports/stream.nim

+18-12
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,24 @@ proc clean(transp: StreamTransport) {.inline.} =
295295
transp.future.complete()
296296
GC_unref(transp)
297297

298+
proc bindSocket*(sock: AsyncFD, localAddress: TransportAddress, reuseAddr = true) {.
299+
raises: [Defect, OSError, TransportOsError].} =
300+
if reuseAddr:
301+
# Setting SO_REUSEADDR option we are able to reuse ports using the 0.0.0.0 address (or equivalent)
302+
setSockOptInt(SocketHandle(sock), SOL_SOCKET, SO_REUSEADDR, 1)
303+
304+
var raddress =
305+
when defined(windows):
306+
windowsAnyAddressFix(localAddress)
307+
else:
308+
localAddress
309+
var
310+
localAddr: Sockaddr_storage
311+
localAddrLen: SockLen
312+
raddress.toSAddr(localAddr, localAddrLen)
313+
if bindSocket(SocketHandle(sock), cast[ptr SockAddr](addr localAddr), localAddrLen) != 0:
314+
raiseTransportOsError(osLastError())
315+
298316
when defined(nimdoc):
299317
proc pauseAccept(server: StreamServer) {.inline.} = discard
300318
proc resumeAccept(server: StreamServer) {.inline.} = discard
@@ -1604,18 +1622,6 @@ else:
16041622
return retFuture
16051623
return connect(sock, address, bufferSize, child)
16061624

1607-
proc bindSocket*(sock: AsyncFD, localAddress: TransportAddress, reuseAddr = true) {.
1608-
raises: [Defect, OSError, TransportOsError].} =
1609-
if reuseAddr:
1610-
# Setting SO_REUSEADDR option we are able to reuse ports using the 0.0.0.0 address (or equivalent)
1611-
setSockOptInt(SocketHandle(sock), SOL_SOCKET, SO_REUSEADDR, 1)
1612-
var
1613-
localAddr: Sockaddr_storage
1614-
localAddrLen: SockLen
1615-
localAddress.toSAddr(localAddr, localAddrLen)
1616-
if posix.bindSocket(SocketHandle(sock), cast[ptr SockAddr](addr localAddr), localAddrLen) != 0:
1617-
raiseTransportOsError(osLastError())
1618-
16191625
proc acceptLoop(udata: pointer) =
16201626
if isNil(udata):
16211627
# TODO this is an if rather than an assert for historical reasons:

0 commit comments

Comments
 (0)