Example #1
0
    public static IObservable<Socket> AcceptObservable(this Socket socket)
    {
      Contract.Requires(socket != null);
      Contract.Ensures(Contract.Result<IObservable<Socket>>() != null);

      var args = new SocketAsyncEventArgs();

      return socket
        .AcceptObservable(args)
        .Select(e => e.AcceptSocket)
        .Finally(args.Dispose);
    }
Example #2
0
    private static IObservable<Either<Socket, byte[]>> AcceptObservableWithBuffer(this Socket socket, SocketAsyncEventArgs eventArgs)
    {
      Contract.Requires(socket != null);
      Contract.Requires(eventArgs != null);
      Contract.Ensures(Contract.Result<IObservable<Either<Socket, byte[]>>>() != null);

      return socket
        .AcceptObservable(eventArgs)
        .Pair(
          args => args.AcceptSocket,
          args =>
          {
            byte[] buffer = args.Buffer;

            if (buffer.Length > args.BytesTransferred)
            {
              var copy = new byte[args.BytesTransferred];

              Array.Copy(buffer, copy, args.BytesTransferred);

              buffer = copy;
            }

            return buffer;
          });
    }