import { TypedEventEmitter } from 'main-event';
import type { CloseServerOnMaxConnectionsOpts, TCPCreateListenerOptions } from './index.js';
import type { ComponentLogger, Metrics, Listener, ListenerEvents, Upgrader } from '@libp2p/interface';
import type { Multiaddr } from '@multiformats/multiaddr';
interface Context extends TCPCreateListenerOptions {
    upgrader: Upgrader;
    socketInactivityTimeout?: number;
    socketCloseTimeout?: number;
    maxConnections?: number;
    backlog?: number;
    metrics?: Metrics;
    closeServerOnMaxConnections?: CloseServerOnMaxConnectionsOpts;
    logger: ComponentLogger;
}
export declare class TCPListener extends TypedEventEmitter<ListenerEvents> implements Listener {
    private readonly context;
    private readonly server;
    /** Keep track of open sockets to destroy in case of timeout */
    private readonly sockets;
    private status;
    private metrics;
    private addr;
    private readonly log;
    private readonly shutdownController;
    constructor(context: Context);
    private onSocket;
    getAddrs(): Multiaddr[];
    updateAnnounceAddrs(): void;
    listen(ma: Multiaddr): Promise<void>;
    close(): Promise<void>;
    /**
     * Can resume a stopped or start an inert server
     */
    private resume;
    private pause;
}
export {};
//# sourceMappingURL=listener.d.ts.map