正在查看: Kreate v1.5.0 应用的 ServerSocketImpl.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Kreate v1.5.0 应用的 ServerSocketImpl.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package io.ktor.network.sockets;
import io.ktor.network.selector.SelectInterest;
import io.ktor.network.selector.SelectableBase;
import io.ktor.network.selector.SelectorManager;
import io.ktor.network.sockets.ServerSocket;
import java.net.SocketOption;
import java.net.StandardSocketOptions;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import kotlin.Metadata;
import kotlin.coroutines.Continuation;
import kotlin.jvm.internal.Intrinsics;
import kotlinx.coroutines.CompletableJob;
import kotlinx.coroutines.Job;
import kotlinx.coroutines.JobKt;
@Metadata(d1 = {"\u0000B\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0010\u0002\n\u0002\b\b\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0004\b\u0000\u0018\u00002\u00020\u00012\u00020\u0002B\u0017\u0012\u0006\u0010\u0004\u001a\u00020\u0003\u0012\u0006\u0010\u0006\u001a\u00020\u0005¢\u0006\u0004\b\u0007\u0010\bJ\u0010\u0010\n\u001a\u00020\tH\u0096@¢\u0006\u0004\b\n\u0010\u000bJ\u0010\u0010\f\u001a\u00020\tH\u0082@¢\u0006\u0004\b\f\u0010\u000bJ\u0017\u0010\u000f\u001a\u00020\t2\u0006\u0010\u000e\u001a\u00020\rH\u0002¢\u0006\u0004\b\u000f\u0010\u0010J\u000f\u0010\u0012\u001a\u00020\u0011H\u0016¢\u0006\u0004\b\u0012\u0010\u0013R\u001a\u0010\u0004\u001a\u00020\u00038\u0016X\u0096\u0004¢\u0006\f\n\u0004\b\u0004\u0010\u0014\u001a\u0004\b\u0015\u0010\u0016R\u0017\u0010\u0006\u001a\u00020\u00058\u0006¢\u0006\f\n\u0004\b\u0006\u0010\u0017\u001a\u0004\b\u0018\u0010\u0019R\u001a\u0010\u001b\u001a\u00020\u001a8\u0016X\u0096\u0004¢\u0006\f\n\u0004\b\u001b\u0010\u001c\u001a\u0004\b\u001d\u0010\u001eR\u0014\u0010\"\u001a\u00020\u001f8VX\u0096\u0004¢\u0006\u0006\u001a\u0004\b \u0010!¨\u0006#"}, d2 = {"Lio/ktor/network/sockets/ServerSocketImpl;", "Lio/ktor/network/selector/SelectableBase;", "Lio/ktor/network/sockets/ServerSocket;", "Ljava/nio/channels/ServerSocketChannel;", "channel", "Lio/ktor/network/selector/SelectorManager;", "selector", "<init>", "(Ljava/nio/channels/ServerSocketChannel;Lio/ktor/network/selector/SelectorManager;)V", "Lio/ktor/network/sockets/Socket;", "accept", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", "acceptSuspend", "Ljava/nio/channels/SocketChannel;", "nioChannel", "accepted", "(Ljava/nio/channels/SocketChannel;)Lio/ktor/network/sockets/Socket;", "", "close", "()V", "Ljava/nio/channels/ServerSocketChannel;", "getChannel", "()Ljava/nio/channels/ServerSocketChannel;", "Lio/ktor/network/selector/SelectorManager;", "getSelector", "()Lio/ktor/network/selector/SelectorManager;", "Lkotlinx/coroutines/CompletableJob;", "socketContext", "Lkotlinx/coroutines/CompletableJob;", "getSocketContext", "()Lkotlinx/coroutines/CompletableJob;", "Lio/ktor/network/sockets/SocketAddress;", "getLocalAddress", "()Lio/ktor/network/sockets/SocketAddress;", "localAddress", "ktor-network"}, k = 1, mv = {2, 1, 0}, xi = 48)
public final class ServerSocketImpl extends SelectableBase implements ServerSocket, AutoCloseable {
private final ServerSocketChannel channel;
private final SelectorManager selector;
private final CompletableJob socketContext;
@Override
public void dispose() {
ServerSocket.DefaultImpls.dispose(this);
}
@Override
public ServerSocketChannel getChannel() {
return this.channel;
}
public final SelectorManager getSelector() {
return this.selector;
}
public ServerSocketImpl(ServerSocketChannel channel, SelectorManager selector) {
Intrinsics.checkNotNullParameter(channel, "channel");
Intrinsics.checkNotNullParameter(selector, "selector");
this.channel = channel;
this.selector = selector;
if (getChannel().isBlocking()) {
throw new IllegalArgumentException("Channel need to be configured as non-blocking.".toString());
}
this.socketContext = JobKt.Job$default((Job) null, 1, (Object) null);
}
@Override
public CompletableJob getSocketContext() {
return this.socketContext;
}
@Override
public SocketAddress getLocalAddress() {
java.net.SocketAddress localSocketAddress;
if (JavaSocketOptionsKt.getJava7NetworkApisAvailable()) {
localSocketAddress = getChannel().getLocalAddress();
} else {
localSocketAddress = getChannel().socket().getLocalSocketAddress();
}
Intrinsics.checkNotNull(localSocketAddress);
return JavaSocketAddressUtilsKt.toSocketAddress(localSocketAddress);
}
@Override
public Object accept(Continuation<? super Socket> continuation) {
SocketChannel accept = getChannel().accept();
return accept != null ? accepted(accept) : acceptSuspend(continuation);
}
public final java.lang.Object acceptSuspend(kotlin.coroutines.Continuation<? super io.ktor.network.sockets.Socket> r6) {
throw new UnsupportedOperationException("Method not decompiled: io.ktor.network.sockets.ServerSocketImpl.acceptSuspend(kotlin.coroutines.Continuation):java.lang.Object");
}
private final Socket accepted(SocketChannel nioChannel) {
SocketOption socketOption;
interestOp(SelectInterest.ACCEPT, false);
nioChannel.configureBlocking(false);
if (getLocalAddress() instanceof InetSocketAddress) {
if (JavaSocketOptionsKt.getJava7NetworkApisAvailable()) {
socketOption = StandardSocketOptions.TCP_NODELAY;
nioChannel.setOption((SocketOption<SocketOption<SocketOption>>) ((SocketOption<SocketOption>) socketOption), (SocketOption<SocketOption>) ((SocketOption) true));
} else {
nioChannel.socket().setTcpNoDelay(true);
}
}
return new SocketImpl(nioChannel, this.selector, null, 4, null);
}
@Override
public void close() {
try {
try {
getChannel().close();
this.selector.notifyClosed(this);
getSocketContext().complete();
} catch (Throwable th) {
this.selector.notifyClosed(this);
throw th;
}
} catch (Throwable th2) {
getSocketContext().completeExceptionally(th2);
}
}
}