package io.netty.channel.unix;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.unix.Errors;
import io.netty.util.internal.ObjectUtil;
import java.nio.ByteBuffer;
import java.nio.channels.WritableByteChannel;

/* JADX INFO: loaded from: classes.dex */
public abstract class SocketWritableByteChannel implements WritableByteChannel {
    private final FileDescriptor fd;

    public SocketWritableByteChannel(FileDescriptor fileDescriptor) {
        this.fd = (FileDescriptor) ObjectUtil.checkNotNull(fileDescriptor, "fd");
    }

    public abstract ByteBufAllocator alloc();

    @Override // java.nio.channels.Channel, java.io.Closeable, java.lang.AutoCloseable
    public final void close() throws Errors.NativeIoException {
        this.fd.close();
    }

    @Override // java.nio.channels.Channel
    public final boolean isOpen() {
        return this.fd.isOpen();
    }

    @Override // java.nio.channels.WritableByteChannel
    public final int write(ByteBuffer byteBuffer) {
        int iWrite;
        int iPosition = byteBuffer.position();
        int iLimit = byteBuffer.limit();
        if (byteBuffer.isDirect()) {
            iWrite = this.fd.write(byteBuffer, iPosition, byteBuffer.limit());
        } else {
            int i2 = iLimit - iPosition;
            ByteBuf byteBufThreadLocalDirectBuffer = null;
            try {
                if (i2 == 0) {
                    byteBufThreadLocalDirectBuffer = Unpooled.EMPTY_BUFFER;
                } else {
                    ByteBufAllocator byteBufAllocatorAlloc = alloc();
                    if (byteBufAllocatorAlloc.isDirectBufferPooled()) {
                        byteBufThreadLocalDirectBuffer = byteBufAllocatorAlloc.directBuffer(i2);
                    } else {
                        byteBufThreadLocalDirectBuffer = ByteBufUtil.threadLocalDirectBuffer();
                        if (byteBufThreadLocalDirectBuffer == null) {
                            byteBufThreadLocalDirectBuffer = Unpooled.directBuffer(i2);
                        }
                    }
                }
                byteBufThreadLocalDirectBuffer.writeBytes(byteBuffer.duplicate());
                ByteBuffer byteBufferInternalNioBuffer = byteBufThreadLocalDirectBuffer.internalNioBuffer(byteBufThreadLocalDirectBuffer.readerIndex(), i2);
                iWrite = this.fd.write(byteBufferInternalNioBuffer, byteBufferInternalNioBuffer.position(), byteBufferInternalNioBuffer.limit());
                byteBufThreadLocalDirectBuffer.release();
            } catch (Throwable th) {
                if (byteBufThreadLocalDirectBuffer != null) {
                    byteBufThreadLocalDirectBuffer.release();
                }
                throw th;
            }
        }
        if (iWrite > 0) {
            byteBuffer.position(iPosition + iWrite);
        }
        return iWrite;
    }
}
