File tree Expand file tree Collapse file tree 3 files changed +31
-14
lines changed
io/jvm-native/src/main/scala/fs2/io/net Expand file tree Collapse file tree 3 files changed +31
-14
lines changed Original file line number Diff line number Diff line change
1
+ package fs2
2
+ package io
3
+ package net
4
+
5
+ import com .comcast .ip4s .{GenSocketAddress , SocketAddress , UnixSocketAddress }
6
+ import java .net .{InetSocketAddress , UnixDomainSocketAddress }
7
+ import jnr .unixsocket .{UnixSocketAddress => JnrUnixSocketAddress }
8
+
9
+ private [net] object SocketAddressHelpers {
10
+
11
+ def toGenSocketAddress (address : java.net.SocketAddress ): GenSocketAddress = {
12
+ address match {
13
+ case addr : InetSocketAddress => SocketAddress .fromInetSocketAddress(addr)
14
+ case _ =>
15
+ if (JdkUnixSocketsProvider .supported && address.isInstanceOf [UnixDomainSocketAddress ]) {
16
+ UnixSocketAddress (address.asInstanceOf [UnixDomainSocketAddress ].getPath.toString)
17
+ } else if (JnrUnixSocketsProvider .supported && address.isInstanceOf [JnrUnixSocketAddress ]) {
18
+ UnixSocketAddress (address.asInstanceOf [JnrUnixSocketAddress ].path)
19
+ } else throw new IllegalArgumentException (" Unsupported address type: " + address)
20
+ }
21
+ }
22
+ }
Original file line number Diff line number Diff line change @@ -23,10 +23,9 @@ package fs2
23
23
package io
24
24
package net
25
25
26
- import com .comcast .ip4s .{ GenSocketAddress , SocketAddress }
26
+ import com .comcast .ip4s .GenSocketAddress
27
27
import cats .effect .Async
28
28
29
- import java .net .InetSocketAddress
30
29
import java .nio .channels .NetworkChannel
31
30
32
31
import scala .jdk .CollectionConverters .*
@@ -44,12 +43,7 @@ private[net] trait SocketInfoCompanionPlatform {
44
43
protected def channel : NetworkChannel
45
44
46
45
override def localAddressGen : F [GenSocketAddress ] =
47
- asyncInstance.delay(
48
- channel.getLocalAddress match {
49
- case addr : InetSocketAddress => SocketAddress .fromInetSocketAddress(addr)
50
- // TODO handle unix sockets
51
- }
52
- )
46
+ asyncInstance.delay(SocketAddressHelpers .toGenSocketAddress(channel.getLocalAddress))
53
47
54
48
override def supportedOptions : F [Set [SocketOption .Key [? ]]] =
55
49
asyncInstance.delay {
Original file line number Diff line number Diff line change @@ -124,7 +124,7 @@ private[net] trait SocketCompanionPlatform {
124
124
F .delay(Some (endOfInput.voidError))
125
125
}
126
126
127
- def write (bytes : Chunk [Byte ]): F [Unit ] = {
127
+ override def write (bytes : Chunk [Byte ]): F [Unit ] = {
128
128
def go (buff : ByteBuffer ): F [Unit ] =
129
129
F .async[Int ] { cb =>
130
130
ch.write(
@@ -150,23 +150,24 @@ private[net] trait SocketCompanionPlatform {
150
150
)
151
151
)
152
152
153
- def remoteAddress : F [SocketAddress [IpAddress ]] =
153
+ override def remoteAddress : F [SocketAddress [IpAddress ]] =
154
154
F .delay(
155
155
SocketAddress .fromInetSocketAddress(
156
156
ch.getRemoteAddress.asInstanceOf [InetSocketAddress ]
157
157
)
158
158
)
159
159
160
- override def remoteAddressGen : F [GenSocketAddress ] = ???
160
+ override def remoteAddressGen : F [GenSocketAddress ] =
161
+ F .delay(SocketAddressHelpers .toGenSocketAddress(ch.getRemoteAddress))
161
162
162
- def isOpen : F [Boolean ] = F .delay(ch.isOpen)
163
+ override def isOpen : F [Boolean ] = F .delay(ch.isOpen)
163
164
164
- def endOfOutput : F [Unit ] =
165
+ override def endOfOutput : F [Unit ] =
165
166
F .delay {
166
167
ch.shutdownOutput(); ()
167
168
}
168
169
169
- def endOfInput : F [Unit ] =
170
+ override def endOfInput : F [Unit ] =
170
171
F .delay {
171
172
ch.shutdownInput(); ()
172
173
}
You can’t perform that action at this time.
0 commit comments