<?php

namespace WP_Ultimo\Dependencies\Amp\Socket;

use WP_Ultimo\Dependencies\Amp\ByteStream\InputStream;
use WP_Ultimo\Dependencies\Amp\ByteStream\OutputStream;
interface Socket extends InputStream, OutputStream
{
    /**
     * References the read watcher, so the loop keeps running in case there's an active read.
     *
     * @see Loop::reference()
     */
    public function reference() : void;
    /**
     * Unreferences the read watcher, so the loop doesn't keep running even if there are active reads.
     *
     * @see Loop::unreference()
     */
    public function unreference() : void;
    /**
     * Force closes the socket, failing any pending reads or writes.
     */
    public function close() : void;
    /**
     * Returns whether the socket has been closed.
     *
     * @return bool {@code true} if closed, otherwise {@code false}
     */
    public function isClosed() : bool;
    /**
     * @return SocketAddress
     */
    public function getLocalAddress() : SocketAddress;
    /**
     * @return SocketAddress
     */
    public function getRemoteAddress() : SocketAddress;
}
