Closed
Description
This collects all the Socket
APIs that have been approved: #861 #921 #938. (Edit: Also #43933.)
(Edit: removed the async overloads that elide SocketFlags, since this isn't a complete set. See #43934 instead.)
class Socket
{
// existing: public static bool ConnectAsync(SocketType socketType, ProtocolType protocolType, SocketAsyncEventArgs e);
public static bool ConnectAsync (SocketType socketType, ProtocolType protocolType, SocketAsyncEventArgs e, ConnectAlgorithm connectAlgorithm);
}
// new enum
enum ConnectAlgorithm
{
// use existing behavior.
Default,
// use a Happy Eyeballs-like algorithm to connect.
Parallel = 1
}
These APIs were approved and implemented in #40750:
class SocketTaskExtensions
{
// existing: public static Task ConnectAsync (this Socket socket, EndPoint remoteEP);
public static ValueTask ConnectAsync (this Socket socket, EndPoint remoteEP, CancellationToken cancellationToken);
// existing: public static Task ConnectAsync (this Socket socket, IPAddress address, int port);
public static ValueTask ConnectAsync (this Socket socket, IPAddress address, int port, CancellationToken cancellationToken);
// existing: public static Task ConnectAsync (this Socket socket, IPAddress[] addresses, int port);
public static ValueTask ConnectAsync (this Socket socket, IPAddress[] addresses, int port, CancellationToken cancellationToken);
// existing: public static Task ConnectAsync (this Socket socket, string host, int port);
public static ValueTask ConnectAsync (this Socket socket, string host, int port, CancellationToken cancellationToken);
}
class TcpClient
{
// existing: public Task ConnectAsync (string host, int port)
public ValueTask ConnectAsync (string host, int port, CancellationToken cancellationToken);
// existing: public Task ConnectAsync (IPAddress address, int port);
public ValueTask ConnectAsync (IPAddress address, int port, CancellationToken cancellationToken);
// existing: public Task ConnectAsync (IPAddress[] addresses, int port);
public ValueTask ConnectAsync (IPAddress[] addresses, int port, CancellationToken cancellationToken);
}
These were implemented in #47229:
class Socket
{
// existing: public static Task<int> SendToAsync(this Socket socket, ArraySegment<byte> buffer, SocketFlags socketFlags, EndPoint remoteEP);
public ValueTask<int> SendToAsync(ReadOnlyMemory<byte> buffer, SocketFlags socketFlags, EndPoint remoteEP, CancellationToken cancellationToken = null);
// existing: public static Task<SocketReceiveFromResult> ReceiveFromAsync(this Socket socket, ArraySegment<byte> buffer, SocketFlags socketFlags, EndPoint remoteEndPoint);
public ValueTask<SocketReceiveFromResult> ReceiveFromAsync(Memory<byte> buffer, SocketFlags socketFlags, EndPoint remoteEP, CancellationToken cancellationToken = null);
// existing: public static Task<SocketReceiveMessageFromResult> ReceiveMessageFromAsync(this Socket socket, ArraySegment<byte> buffer, SocketFlags socketFlags, EndPoint remoteEndPoint);
public ValueTask<SocketReceiveMessageFromResult> ReceiveMessageFromAsync(Memory<byte> buffer, SocketFlags socketFlags, EndPoint remoteEP, CancellationToken cancellationToken = null);
}
This was implemented in #46285:
class Socket
{
// existing: public int ReceiveMessageFrom(byte[] buffer, int offset, int size, ref System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, out System.Net.Sockets.IPPacketInformation ipPacketInformation);
public int ReceiveMessageFrom(Span<byte> buffer, ref System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, out System.Net.Sockets.IPPacketInformation ipPacketInformation);
}
class Socket
{
// existing: public int SendTo(byte[] buffer, EndPoint remoteEP);
public int SendTo(ReadOnlySpan<byte> buffer, EndPoint remoteEP);
// existing: public int SendTo(byte[] buffer, SocketFlags socketFlags, EndPoint remoteEP);
public int SendTo(ReadOnlySpan<byte> buffer, SocketFlags socketFlags, EndPoint remoteEP);
// existing: public int ReceiveFrom(byte[] buffer, ref EndPoint remoteEP);
public int ReceiveFrom(Span<byte> buffer, ref EndPoint remoteEP);
// existing: public int ReceiveFrom(byte[] buffer, int offset, int size, SocketFlags socketFlags, ref EndPoint remoteEP);
public int ReceiveFrom(Span<byte> buffer, SocketFlags socketFlags, ref EndPoint remoteEP);
}
These were implemented in #53340:
class Socket
{
// existing: public static Task<Socket> AcceptAsync (this Socket socket);
public ValueTask<Socket> AcceptAsync (CancellationToken cancellationToken);
// existing: public static Task<Socket> AcceptAsync (this Socket socket, Socket acceptSocket);
public ValueTask<Socket> AcceptAsync (Socket acceptSocket, CancellationToken cancellationToken);
}
class TcpListener
{
// existing: public Task<Socket> AcceptSocketAsync ();
public ValueTask<Socket> AcceptSocketAsync (CancellationToken cancellationToken);
// existing: public Task<TcpClient> AcceptTcpClientAsync ();
public ValueTask<TcpClient> AcceptTcpClientAsync (CancellationToken cancellationToken);
}