@@ -24,6 +24,7 @@ package fs2.io.net.unixsocket
2424import cats .effect .kernel .{Async , Resource }
2525import cats .effect .syntax .all ._
2626import fs2 .io .file .Files
27+ import fs2 .io .evalOnVirtualThreadIfAvailable
2728import java .net .{StandardProtocolFamily , UnixDomainSocketAddress }
2829import java .nio .channels .{ServerSocketChannel , SocketChannel }
2930
@@ -41,28 +42,32 @@ object JdkUnixSockets {
4142private [unixsocket] class JdkUnixSocketsImpl [F [_]: Files ](implicit F : Async [F ])
4243 extends UnixSockets .AsyncUnixSockets [F ] {
4344 protected def openChannel (address : UnixSocketAddress ) =
44- Resource
45- .make(F .blocking(SocketChannel .open(StandardProtocolFamily .UNIX )))(ch =>
46- F .blocking(ch.close())
47- )
48- .evalTap { ch =>
49- F .blocking(ch.connect(UnixDomainSocketAddress .of(address.path)))
50- .cancelable(F .blocking(ch.close()))
51- }
45+ evalOnVirtualThreadIfAvailable(
46+ Resource
47+ .make(
48+ F .blocking(SocketChannel .open(StandardProtocolFamily .UNIX ))
49+ )(ch => F .blocking(ch.close()))
50+ .evalTap { ch =>
51+ F .blocking(ch.connect(UnixDomainSocketAddress .of(address.path)))
52+ .cancelable(F .blocking(ch.close()))
53+ }
54+ )
5255
5356 protected def openServerChannel (address : UnixSocketAddress ) =
54- Resource
55- .make(F .blocking(ServerSocketChannel .open(StandardProtocolFamily .UNIX )))(ch =>
56- F .blocking(ch.close())
57- )
58- .evalTap { sch =>
59- F .blocking(sch.bind(UnixDomainSocketAddress .of(address.path)))
60- .cancelable(F .blocking(sch.close()))
61- }
62- .map { sch =>
63- Resource .makeFull[F , SocketChannel ] { poll =>
64- poll(F .blocking(sch.accept).cancelable(F .blocking(sch.close())))
65- }(ch => F .blocking(ch.close()))
66- }
57+ evalOnVirtualThreadIfAvailable(
58+ Resource
59+ .make(
60+ F .blocking(ServerSocketChannel .open(StandardProtocolFamily .UNIX ))
61+ )(ch => F .blocking(ch.close()))
62+ .evalTap { sch =>
63+ F .blocking(sch.bind(UnixDomainSocketAddress .of(address.path)))
64+ .cancelable(F .blocking(sch.close()))
65+ }
66+ .map { sch =>
67+ Resource .makeFull[F , SocketChannel ] { poll =>
68+ poll(F .blocking(sch.accept).cancelable(F .blocking(sch.close())))
69+ }(ch => F .blocking(ch.close()))
70+ }
71+ )
6772
6873}
0 commit comments