You've already forked linux-packaging-mono
Imported Upstream version 4.4.2.4
Former-commit-id: 92904c9c5915c37244316e42ba99e7b934ed7ee2
This commit is contained in:
parent
589d484eee
commit
0b4a830db1
@ -0,0 +1,36 @@
|
||||
//
|
||||
// SocketReceiveFromResult.cs
|
||||
//
|
||||
// Authors:
|
||||
// Marek Safar <marek.safar@gmail.com>
|
||||
//
|
||||
// Copyright (C) 2016 Xamarin Inc (http://www.xamarin.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining
|
||||
// a copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
namespace System.Net.Sockets
|
||||
{
|
||||
public struct SocketReceiveFromResult
|
||||
{
|
||||
public int ReceivedBytes;
|
||||
public EndPoint RemoteEndPoint;
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
//
|
||||
// SocketReceiveMessageFromResult.cs
|
||||
//
|
||||
// Authors:
|
||||
// Marek Safar <marek.safar@gmail.com>
|
||||
//
|
||||
// Copyright (C) 2016 Xamarin Inc (http://www.xamarin.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining
|
||||
// a copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
namespace System.Net.Sockets
|
||||
{
|
||||
public struct SocketReceiveMessageFromResult
|
||||
{
|
||||
public int ReceivedBytes;
|
||||
public SocketFlags SocketFlags;
|
||||
public EndPoint RemoteEndPoint;
|
||||
public IPPacketInformation PacketInformation;
|
||||
}
|
||||
}
|
250
mcs/class/Facades/System.Net.Sockets/SocketTaskExtensions.cs
Normal file
250
mcs/class/Facades/System.Net.Sockets/SocketTaskExtensions.cs
Normal file
@ -0,0 +1,250 @@
|
||||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace System.Net.Sockets
|
||||
{
|
||||
public static class SocketTaskExtensions
|
||||
{
|
||||
public static Task<Socket> AcceptAsync(this Socket socket)
|
||||
{
|
||||
return Task<Socket>.Factory.FromAsync(
|
||||
(callback, state) => ((Socket)state).BeginAccept(callback, state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndAccept(asyncResult),
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task<Socket> AcceptAsync(this Socket socket, Socket acceptSocket)
|
||||
{
|
||||
const int ReceiveSize = 0;
|
||||
return Task<Socket>.Factory.FromAsync(
|
||||
(socketForAccept, receiveSize, callback, state) => ((Socket)state).BeginAccept(socketForAccept, receiveSize, callback, state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndAccept(asyncResult),
|
||||
acceptSocket,
|
||||
ReceiveSize,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task ConnectAsync(this Socket socket, EndPoint remoteEndPoint)
|
||||
{
|
||||
return Task.Factory.FromAsync(
|
||||
(targetEndPoint, callback, state) => ((Socket)state).BeginConnect(targetEndPoint, callback, state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndConnect(asyncResult),
|
||||
remoteEndPoint,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task ConnectAsync(this Socket socket, IPAddress address, int port)
|
||||
{
|
||||
return Task.Factory.FromAsync(
|
||||
(targetAddress, targetPort, callback, state) => ((Socket)state).BeginConnect(targetAddress, targetPort, callback, state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndConnect(asyncResult),
|
||||
address,
|
||||
port,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task ConnectAsync(this Socket socket, IPAddress[] addresses, int port)
|
||||
{
|
||||
return Task.Factory.FromAsync(
|
||||
(targetAddresses, targetPort, callback, state) => ((Socket)state).BeginConnect(targetAddresses, targetPort, callback, state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndConnect(asyncResult),
|
||||
addresses,
|
||||
port,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task ConnectAsync(this Socket socket, string host, int port)
|
||||
{
|
||||
return Task.Factory.FromAsync(
|
||||
(targetHost, targetPort, callback, state) => ((Socket)state).BeginConnect(targetHost, targetPort, callback, state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndConnect(asyncResult),
|
||||
host,
|
||||
port,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task<int> ReceiveAsync(this Socket socket, ArraySegment<byte> buffer, SocketFlags socketFlags)
|
||||
{
|
||||
return Task<int>.Factory.FromAsync(
|
||||
(targetBuffer, flags, callback, state) => ((Socket)state).BeginReceive(
|
||||
targetBuffer.Array,
|
||||
targetBuffer.Offset,
|
||||
targetBuffer.Count,
|
||||
flags,
|
||||
callback,
|
||||
state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndReceive(asyncResult),
|
||||
buffer,
|
||||
socketFlags,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task<int> ReceiveAsync(
|
||||
this Socket socket,
|
||||
IList<ArraySegment<byte>> buffers,
|
||||
SocketFlags socketFlags)
|
||||
{
|
||||
return Task<int>.Factory.FromAsync(
|
||||
(targetBuffers, flags, callback, state) => ((Socket)state).BeginReceive(targetBuffers, flags, callback, state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndReceive(asyncResult),
|
||||
buffers,
|
||||
socketFlags,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task<SocketReceiveFromResult> ReceiveFromAsync(
|
||||
this Socket socket,
|
||||
ArraySegment<byte> buffer,
|
||||
SocketFlags socketFlags,
|
||||
EndPoint remoteEndPoint)
|
||||
{
|
||||
object[] packedArguments = new object[] { socket, remoteEndPoint };
|
||||
|
||||
return Task<SocketReceiveFromResult>.Factory.FromAsync(
|
||||
(targetBuffer, flags, callback, state) =>
|
||||
{
|
||||
var arguments = (object[])state;
|
||||
var s = (Socket)arguments[0];
|
||||
var e = (EndPoint)arguments[1];
|
||||
|
||||
IAsyncResult result = s.BeginReceiveFrom(
|
||||
targetBuffer.Array,
|
||||
targetBuffer.Offset,
|
||||
targetBuffer.Count,
|
||||
flags,
|
||||
ref e,
|
||||
callback,
|
||||
state);
|
||||
|
||||
arguments[1] = e;
|
||||
return result;
|
||||
},
|
||||
asyncResult =>
|
||||
{
|
||||
var arguments = (object[])asyncResult.AsyncState;
|
||||
var s = (Socket)arguments[0];
|
||||
var e = (EndPoint)arguments[1];
|
||||
|
||||
int bytesReceived = s.EndReceiveFrom(asyncResult, ref e);
|
||||
|
||||
return new SocketReceiveFromResult()
|
||||
{
|
||||
ReceivedBytes = bytesReceived,
|
||||
RemoteEndPoint = e
|
||||
};
|
||||
},
|
||||
buffer,
|
||||
socketFlags,
|
||||
state: packedArguments);
|
||||
}
|
||||
|
||||
public static Task<SocketReceiveMessageFromResult> ReceiveMessageFromAsync(
|
||||
this Socket socket,
|
||||
ArraySegment<byte> buffer,
|
||||
SocketFlags socketFlags,
|
||||
EndPoint remoteEndPoint)
|
||||
{
|
||||
object[] packedArguments = new object[] { socket, socketFlags, remoteEndPoint };
|
||||
|
||||
return Task<SocketReceiveMessageFromResult>.Factory.FromAsync(
|
||||
(targetBuffer, callback, state) =>
|
||||
{
|
||||
var arguments = (object[])state;
|
||||
var s = (Socket)arguments[0];
|
||||
var f = (SocketFlags)arguments[1];
|
||||
var e = (EndPoint)arguments[2];
|
||||
|
||||
IAsyncResult result = s.BeginReceiveMessageFrom(
|
||||
targetBuffer.Array,
|
||||
targetBuffer.Offset,
|
||||
targetBuffer.Count,
|
||||
f,
|
||||
ref e,
|
||||
callback,
|
||||
state);
|
||||
|
||||
arguments[2] = e;
|
||||
return result;
|
||||
},
|
||||
asyncResult =>
|
||||
{
|
||||
var arguments = (object[])asyncResult.AsyncState;
|
||||
var s = (Socket)arguments[0];
|
||||
var f = (SocketFlags)arguments[1];
|
||||
var e = (EndPoint)arguments[2];
|
||||
IPPacketInformation ipPacket;
|
||||
|
||||
int bytesReceived = s.EndReceiveMessageFrom(
|
||||
asyncResult,
|
||||
ref f,
|
||||
ref e,
|
||||
out ipPacket);
|
||||
|
||||
return new SocketReceiveMessageFromResult()
|
||||
{
|
||||
PacketInformation = ipPacket,
|
||||
ReceivedBytes = bytesReceived,
|
||||
RemoteEndPoint = e,
|
||||
SocketFlags = f
|
||||
};
|
||||
},
|
||||
buffer,
|
||||
state: packedArguments);
|
||||
}
|
||||
|
||||
public static Task<int> SendAsync(this Socket socket, ArraySegment<byte> buffer, SocketFlags socketFlags)
|
||||
{
|
||||
return Task<int>.Factory.FromAsync(
|
||||
(targetBuffer, flags, callback, state) => ((Socket)state).BeginSend(
|
||||
targetBuffer.Array,
|
||||
targetBuffer.Offset,
|
||||
targetBuffer.Count,
|
||||
flags,
|
||||
callback,
|
||||
state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndSend(asyncResult),
|
||||
buffer,
|
||||
socketFlags,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task<int> SendAsync(
|
||||
this Socket socket,
|
||||
IList<ArraySegment<byte>> buffers,
|
||||
SocketFlags socketFlags)
|
||||
{
|
||||
return Task<int>.Factory.FromAsync(
|
||||
(targetBuffers, flags, callback, state) => ((Socket)state).BeginSend(targetBuffers, flags, callback, state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndSend(asyncResult),
|
||||
buffers,
|
||||
socketFlags,
|
||||
state: socket);
|
||||
}
|
||||
|
||||
public static Task<int> SendToAsync(
|
||||
this Socket socket,
|
||||
ArraySegment<byte> buffer,
|
||||
SocketFlags socketFlags,
|
||||
EndPoint remoteEndPoint)
|
||||
{
|
||||
return Task<int>.Factory.FromAsync(
|
||||
(targetBuffer, flags, endPoint, callback, state) => ((Socket)state).BeginSendTo(
|
||||
targetBuffer.Array,
|
||||
targetBuffer.Offset,
|
||||
targetBuffer.Count,
|
||||
flags,
|
||||
endPoint,
|
||||
callback,
|
||||
state),
|
||||
asyncResult => ((Socket)asyncResult.AsyncState).EndSendTo(asyncResult),
|
||||
buffer,
|
||||
socketFlags,
|
||||
remoteEndPoint,
|
||||
state: socket);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
TypeForwarders.cs
|
||||
AssemblyInfo.cs
|
||||
|
||||
SocketReceiveFromResult.cs
|
||||
SocketReceiveMessageFromResult.cs
|
||||
SocketTaskExtensions.cs
|
||||
|
Reference in New Issue
Block a user