KSSLServerSocketImpl.kt

package org.knio.core.net.ssl

import org.knio.core.nio.acceptSuspend
import org.knio.core.context.KnioContext
import java.net.SocketAddress
import javax.net.ssl.SSLContext

internal class KSSLServerSocketImpl (
    sslContext: SSLContext,
    private val context: KnioContext
): KSSLServerSocketAbstract(
    sslContext,
    context.channelFactory.openServerSocketChannel()
) {

    override suspend fun accept(): KSSLSocket {
        val channel = serverChannel.acceptSuspend()

        return KSSLSocketImpl(
            channel = channel,
            sslEngine = createSSLEngine(),
            useClientMode = getUseClientMode(),
            context = context
        )
    }

    override suspend fun bind(endpoint: SocketAddress, backlog: Int) {
        @Suppress("BlockingMethodInNonBlockingContext")
        serverChannel.bind(endpoint, backlog)
    }

    override suspend fun close() {
        @Suppress("BlockingMethodInNonBlockingContext")
        serverChannel.close()
    }

}