@@ -5,7 +5,8 @@ import org.http4s.HttpApp
5
5
import org .http4s .blaze .server .BlazeServerBuilder
6
6
import org .http4s .server .Server
7
7
8
- import java .net .{InetSocketAddress , StandardSocketOptions }
8
+ import java .net .StandardSocketOptions .{SO_KEEPALIVE , SO_REUSEADDR , SO_REUSEPORT }
9
+ import java .net .{InetSocketAddress , SocketOption , StandardSocketOptions }
9
10
import scala .concurrent .ExecutionContext
10
11
import scala .concurrent .duration .Duration
11
12
@@ -27,8 +28,8 @@ object Http4sBlazeServerModule {
27
28
InetSocketAddress .createUnresolved(config.listenAddress, config.listenPort)
28
29
)
29
30
)
30
- server <-
31
- BlazeServerBuilder [F ](executionContext)
31
+ server <- {
32
+ val builder = BlazeServerBuilder [F ](executionContext)
32
33
.bindSocketAddress(inetSocketAddress)
33
34
.withHttpApp(httpApp)
34
35
.withoutBanner
@@ -43,10 +44,23 @@ object Http4sBlazeServerModule {
43
44
.withConnectorPoolSize(config.connectorPoolSize)
44
45
.withMaxConnections(config.maxConnections)
45
46
.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
+ }
50
64
} yield server
51
65
}
52
66
}
0 commit comments