#pragma warning disable CS1591
using System;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Model.Net
{
    /// 
    /// Provides a common interface across platforms for UDP sockets used by this SSDP implementation.
    /// 
    public interface ISocket : IDisposable
    {
        IPAddress LocalIPAddress { get; }
        Task ReceiveAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken);
        IAsyncResult BeginReceive(byte[] buffer, int offset, int count, AsyncCallback callback);
        SocketReceiveResult EndReceive(IAsyncResult result);
        /// 
        /// Sends a UDP message to a particular end point (uni or multicast).
        /// 
        /// An array of type  that contains the data to send.
        /// The zero-based position in buffer at which to begin sending data.
        /// The number of bytes to send.
        /// An  that represents the remote device.
        /// The cancellation token to cancel operation.
        /// The task object representing the asynchronous operation.
        Task SendToAsync(byte[] buffer, int offset, int bytes, IPEndPoint endPoint, CancellationToken cancellationToken);
    }
}