Skip to content

Commit 5af859e

Browse files
committed
Set client socket options on JVM Unix
1 parent 47815b2 commit 5af859e

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

io/jvm-native/src/main/scala/fs2/io/net/SocketOptionPlatform.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,6 @@ private[net] trait SocketOptionCompanionPlatform {
9797
}
9898
def unixServerSocketDeleteOnClose(value: Boolean): SocketOption =
9999
boolean(UnixServerSocketDeleteOnClose, value)
100+
101+
// TODO SO_PEERCRED
100102
}

io/jvm/src/main/scala/fs2/io/net/JdkUnixSocketsProvider.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ package fs2
2323
package io
2424
package net
2525

26+
import cats.syntax.all._
2627
import cats.effect.{Async, Resource}
2728
import cats.effect.syntax.all._
2829

@@ -46,15 +47,16 @@ private[net] object JdkUnixSocketsProvider {
4647

4748
private[net] class JdkUnixSocketsProvider[F[_]: Files](implicit F: Async[F])
4849
extends UnixSocketsProvider.AsyncUnixSocketsProvider[F] {
49-
protected def openChannel(address: UnixSocketAddress) =
50+
protected def openChannel(address: UnixSocketAddress, options: List[SocketOption]) =
5051
evalOnVirtualThreadIfAvailable(
5152
Resource
5253
.make(
5354
F.blocking(SocketChannel.open(StandardProtocolFamily.UNIX))
5455
)(ch => F.blocking(ch.close()))
5556
.evalTap { ch =>
5657
F.blocking(ch.connect(UnixDomainSocketAddress.of(address.path)))
57-
.cancelable(F.blocking(ch.close()))
58+
.cancelable(F.blocking(ch.close())) *>
59+
F.delay(options.foreach(o => ch.setOption(o.key, o.value)))
5860
}
5961
)
6062

io/jvm/src/main/scala/fs2/io/net/JnrUnixSocketsProvider.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,12 @@ private[net] object JnrUnixSocketsProvider {
5757
private[net] class JnrUnixSocketsProvider[F[_]](implicit F: Async[F], F2: Files[F])
5858
extends UnixSocketsProvider.AsyncUnixSocketsProvider[F] {
5959

60-
protected def openChannel(address: UnixSocketAddress) =
61-
Resource.make(F.blocking(UnixSocketChannel.open(new JnrUnixSocketAddress(address.path))))(ch =>
62-
F.blocking(ch.close())
63-
)
60+
protected def openChannel(address: UnixSocketAddress, options: List[SocketOption]) =
61+
Resource
62+
.make(F.blocking(UnixSocketChannel.open(new JnrUnixSocketAddress(address.path))))(ch =>
63+
F.blocking(ch.close())
64+
)
65+
.evalTap(ch => F.delay(options.foreach(o => ch.setOption(o.key, o.value))))
6466

6567
protected def openServerChannel(address: UnixSocketAddress, options: List[SocketOption]) =
6668
Resource

io/jvm/src/main/scala/fs2/io/net/UnixSocketsProviderPlatform.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,18 @@ private[net] trait UnixSocketsProviderCompanionPlatform {
5757
abstract class AsyncUnixSocketsProvider[F[_]: Files](implicit F: Async[F])
5858
extends UnixSocketsProvider[F] {
5959

60-
protected def openChannel(address: UnixSocketAddress): Resource[F, SocketChannel]
60+
protected def openChannel(
61+
address: UnixSocketAddress,
62+
options: List[SocketOption]
63+
): Resource[F, SocketChannel]
6164

6265
protected def openServerChannel(
6366
address: UnixSocketAddress,
6467
options: List[SocketOption]
6568
): Resource[F, (SocketInfo[F], Resource[F, SocketChannel])]
6669

6770
def connect(address: UnixSocketAddress, options: List[SocketOption]): Resource[F, Socket[F]] =
68-
openChannel(address).evalMap(makeSocket[F](_, UnixSocketAddress(""), address))
71+
openChannel(address, options).evalMap(makeSocket[F](_, UnixSocketAddress(""), address))
6972

7073
def bind(
7174
address: UnixSocketAddress,

0 commit comments

Comments
 (0)