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
2323package io
2424package net
2525
26- import com .comcast .ip4s .{ GenSocketAddress , SocketAddress }
26+ import com .comcast .ip4s .GenSocketAddress
2727import cats .effect .Async
2828
29- import java .net .InetSocketAddress
3029import java .nio .channels .NetworkChannel
3130
3231import scala .jdk .CollectionConverters .*
@@ -44,12 +43,7 @@ private[net] trait SocketInfoCompanionPlatform {
4443 protected def channel : NetworkChannel
4544
4645 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))
5347
5448 override def supportedOptions : F [Set [SocketOption .Key [? ]]] =
5549 asyncInstance.delay {
Original file line number Diff line number Diff line change @@ -124,7 +124,7 @@ private[net] trait SocketCompanionPlatform {
124124 F .delay(Some (endOfInput.voidError))
125125 }
126126
127- def write (bytes : Chunk [Byte ]): F [Unit ] = {
127+ override def write (bytes : Chunk [Byte ]): F [Unit ] = {
128128 def go (buff : ByteBuffer ): F [Unit ] =
129129 F .async[Int ] { cb =>
130130 ch.write(
@@ -150,23 +150,24 @@ private[net] trait SocketCompanionPlatform {
150150 )
151151 )
152152
153- def remoteAddress : F [SocketAddress [IpAddress ]] =
153+ override def remoteAddress : F [SocketAddress [IpAddress ]] =
154154 F .delay(
155155 SocketAddress .fromInetSocketAddress(
156156 ch.getRemoteAddress.asInstanceOf [InetSocketAddress ]
157157 )
158158 )
159159
160- override def remoteAddressGen : F [GenSocketAddress ] = ???
160+ override def remoteAddressGen : F [GenSocketAddress ] =
161+ F .delay(SocketAddressHelpers .toGenSocketAddress(ch.getRemoteAddress))
161162
162- def isOpen : F [Boolean ] = F .delay(ch.isOpen)
163+ override def isOpen : F [Boolean ] = F .delay(ch.isOpen)
163164
164- def endOfOutput : F [Unit ] =
165+ override def endOfOutput : F [Unit ] =
165166 F .delay {
166167 ch.shutdownOutput(); ()
167168 }
168169
169- def endOfInput : F [Unit ] =
170+ override def endOfInput : F [Unit ] =
170171 F .delay {
171172 ch.shutdownInput(); ()
172173 }
You can’t perform that action at this time.
0 commit comments