@@ -48,12 +48,13 @@ private[net] trait SocketGroupCompanionPlatform { self: SocketGroup.type =>
48
48
options : List [SocketOption ]
49
49
): Resource [F , Socket [F ]] = {
50
50
def setup : Resource [F , AsynchronousSocketChannel ] =
51
- Resource .make(Async [F ].delay {
52
- val ch =
53
- AsynchronousChannelProvider .provider.openAsynchronousSocketChannel(channelGroup)
54
- options.foreach(opt => ch.setOption(opt.key, opt.value))
55
- ch
56
- })(ch => Async [F ].delay(if (ch.isOpen) ch.close else ()))
51
+ Resource
52
+ .make(
53
+ Async [F ].delay(
54
+ AsynchronousChannelProvider .provider.openAsynchronousSocketChannel(channelGroup)
55
+ )
56
+ )(ch => Async [F ].delay(if (ch.isOpen) ch.close else ()))
57
+ .evalTap(ch => Async [F ].delay(options.foreach(opt => ch.setOption(opt.key, opt.value))))
57
58
58
59
def connect (ch : AsynchronousSocketChannel ): F [AsynchronousSocketChannel ] =
59
60
to.resolve[F ].flatMap { ip =>
@@ -80,24 +81,27 @@ private[net] trait SocketGroupCompanionPlatform { self: SocketGroup.type =>
80
81
options : List [SocketOption ]
81
82
): Resource [F , (SocketAddress [IpAddress ], Stream [F , Socket [F ]])] = {
82
83
83
- val setup : F [AsynchronousServerSocketChannel ] =
84
- address.traverse(_.resolve[F ]).flatMap { addr =>
85
- Async [F ].delay {
86
- val ch =
87
- AsynchronousChannelProvider .provider.openAsynchronousServerSocketChannel(channelGroup)
88
- ch.bind(
89
- new InetSocketAddress (
90
- addr.map(_.toInetAddress).orNull,
91
- port.map(_.value).getOrElse(0 )
84
+ val setup : Resource [F , AsynchronousServerSocketChannel ] =
85
+ Resource .eval(address.traverse(_.resolve[F ])).flatMap { addr =>
86
+ Resource
87
+ .make(
88
+ Async [F ].delay(
89
+ AsynchronousChannelProvider .provider
90
+ .openAsynchronousServerSocketChannel(channelGroup)
91
+ )
92
+ )(sch => Async [F ].delay(if (sch.isOpen) sch.close()))
93
+ .evalTap(ch =>
94
+ Async [F ].delay(
95
+ ch.bind(
96
+ new InetSocketAddress (
97
+ addr.map(_.toInetAddress).orNull,
98
+ port.map(_.value).getOrElse(0 )
99
+ )
100
+ )
92
101
)
93
102
)
94
- ch
95
- }
96
103
}
97
104
98
- def cleanup (sch : AsynchronousServerSocketChannel ): F [Unit ] =
99
- Async [F ].delay(if (sch.isOpen) sch.close())
100
-
101
105
def acceptIncoming (
102
106
sch : AsynchronousServerSocketChannel
103
107
): Stream [F , Socket [F ]] = {
@@ -137,7 +141,7 @@ private[net] trait SocketGroupCompanionPlatform { self: SocketGroup.type =>
137
141
}
138
142
}
139
143
140
- Resource .make( setup)(cleanup) .map { sch =>
144
+ setup.map { sch =>
141
145
val jLocalAddress = sch.getLocalAddress.asInstanceOf [java.net.InetSocketAddress ]
142
146
val localAddress = SocketAddress .fromInetSocketAddress(jLocalAddress)
143
147
(localAddress, acceptIncoming(sch))
0 commit comments