@@ -295,6 +295,24 @@ proc clean(transp: StreamTransport) {.inline.} =
295
295
transp.future.complete ()
296
296
GC_unref (transp)
297
297
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
+
298
316
when defined (nimdoc):
299
317
proc pauseAccept (server: StreamServer ) {.inline .} = discard
300
318
proc resumeAccept (server: StreamServer ) {.inline .} = discard
@@ -1604,18 +1622,6 @@ else:
1604
1622
return retFuture
1605
1623
return connect (sock, address, bufferSize, child)
1606
1624
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
-
1619
1625
proc acceptLoop (udata: pointer ) =
1620
1626
if isNil (udata):
1621
1627
# TODO this is an if rather than an assert for historical reasons:
0 commit comments