@@ -5,7 +5,8 @@ import org.http4s.HttpApp
55import org .http4s .blaze .server .BlazeServerBuilder
66import org .http4s .server .Server
77
8- import java .net .{InetSocketAddress , StandardSocketOptions }
8+ import java .net .StandardSocketOptions .{SO_KEEPALIVE , SO_REUSEADDR , SO_REUSEPORT }
9+ import java .net .{InetSocketAddress , SocketOption , StandardSocketOptions }
910import scala .concurrent .ExecutionContext
1011import scala .concurrent .duration .Duration
1112
@@ -27,8 +28,8 @@ object Http4sBlazeServerModule {
2728 InetSocketAddress .createUnresolved(config.listenAddress, config.listenPort)
2829 )
2930 )
30- server <-
31- BlazeServerBuilder [F ](executionContext)
31+ server <- {
32+ val builder = BlazeServerBuilder [F ](executionContext)
3233 .bindSocketAddress(inetSocketAddress)
3334 .withHttpApp(httpApp)
3435 .withoutBanner
@@ -43,10 +44,23 @@ object Http4sBlazeServerModule {
4344 .withConnectorPoolSize(config.connectorPoolSize)
4445 .withMaxConnections(config.maxConnections)
4546 .withChannelOption[java.lang.Boolean ](StandardSocketOptions .TCP_NODELAY , config.socketOptions.tcpNoDelay)
46- .withChannelOption[java.lang.Boolean ](StandardSocketOptions .SO_KEEPALIVE , config.socketOptions.soKeepAlive)
47- .withChannelOption[java.lang.Boolean ](StandardSocketOptions .SO_REUSEADDR , config.socketOptions.soReuseAddr)
48- .withChannelOption[java.lang.Boolean ](StandardSocketOptions .SO_REUSEPORT , config.socketOptions.soReusePort)
49- .resource
47+
48+ val optionalOptions = {
49+ import config .socketOptions ._
50+
51+ def set (builder : BlazeServerBuilder [F ], value : Option [Boolean ], option : SocketOption [java.lang.Boolean ]): BlazeServerBuilder [F ] =
52+ value.map(builder.withChannelOption[java.lang.Boolean ](option, _)).getOrElse(builder)
53+
54+ List [BlazeServerBuilder [F ] => BlazeServerBuilder [F ]](
55+ b => set(b, soKeepAlive, SO_KEEPALIVE ),
56+ b => set(b, soReuseAddr, SO_REUSEADDR ),
57+ b => set(b, soReusePort, SO_REUSEPORT )
58+ )
59+ }
60+
61+ val updatedBuilder = optionalOptions.foldLeft(builder) { (b, configure) => configure(b) }
62+ updatedBuilder.resource
63+ }
5064 } yield server
5165 }
5266}
0 commit comments