Ejemplo n.º 1
0
                public SendToken([NotNull] Socket socket, [NotNull] TOuterToken outerToken,
                                 [NotNull] IList <ArraySegment <byte> > buffer, int expectedBytesCount,
                                 [NotNull] SenderCallback callback)
                {
                    if (socket == null)
                    {
                        throw new ArgumentNullException("socket");
                    }
                    if (outerToken == null)
                    {
                        throw new ArgumentNullException("outerToken");
                    }
                    if (buffer == null)
                    {
                        throw new ArgumentNullException("buffer");
                    }
                    if (expectedBytesCount <= 0)
                    {
                        throw new ArgumentOutOfRangeException("expectedBytesCount", "must be positive");
                    }
                    if (callback == null)
                    {
                        throw new ArgumentNullException("callback");
                    }

                    Socket             = socket;
                    OuterToken         = outerToken;
                    ExpectedBytesCount = expectedBytesCount;
                    Buffer             = buffer;
                    Callback           = callback;
                }
Ejemplo n.º 2
0
            public void SendAsync([NotNull] Socket socket, [NotNull] IList <ArraySegment <byte> > buffers, int messageSize,
                                  [NotNull] TOuterToken outerToken, [NotNull] SenderCallback callback)
            {
                if (socket == null)
                {
                    throw new ArgumentNullException("socket");
                }
                if (buffers == null)
                {
                    throw new ArgumentNullException("buffers");
                }
                if (messageSize <= 0)
                {
                    throw new ArgumentOutOfRangeException("messageSize", "must be positive");
                }
                if (outerToken == null)
                {
                    throw new ArgumentNullException("outerToken");
                }
                if (callback == null)
                {
                    throw new ArgumentNullException("callback");
                }

                var socketArgs = _socketArgsPool.Get();
                var token      = new SendToken(socket, outerToken, buffers, messageSize, callback);

                socketArgs.BufferList = buffers.Trim(messageSize);
                socketArgs.Completed += SendCompletedHandler;
                socketArgs.UserToken  = token;

                try
                {
                    bool willRaiseEvent = socket.SendAsync(socketArgs);
                    if (!willRaiseEvent)
                    {
                        SendCompletedHandler(this, socketArgs);
                    }
                }
                catch (SocketException socketException)
                {
                    Debug.Assert(socketException.SocketErrorCode != SocketError.Success);
                    ReleaseResourcesAndCallErrorCallback(socketArgs, token, socketException.SocketErrorCode);
                }
            }