public int PostingSend(ASSOCKDESC sockdesc, int length, byte[] data)
        {
            // postingSend, ReleaseSocket(다른 워커쓰레드에서 ResultRead, ResultWrite에서 을 쓰레드락걸지 않으면,
            //  aSocket.sendlist를 위해서라도 락을 걸어야한다.
            lock (this)
            {
                // bugfix 찾지못한경우 널이 반환되는게 아니라 예외가 던져진다.
                AsyncSocket aSocket;
                try
                {
                    aSocket = Sockets[sockdesc.ManagedID];
                }
                catch (Exception /*ex*/)
                {
                    return((int)MyErrorCode.NoSuchSocket);
                }

                if (aSocket.Description.CreateTick != sockdesc.CreateTick)
                {
                    return((int)MyErrorCode.NoSuchSocket);
                }

                // asiomanager 생성시 io 크기보다 큰 센드 요청은 할수 없다.
                if (AsioManager.IOMAXSIZE < length || 0 >= length)
                {
                    return((int)MyErrorCode.SizeError);
                }


                // sendlist쓰지말고 곧바로 보내버리자!!!
                SocketAsyncEventArgs writeEventArgs = AsioManager.RetreiveEventArgs();
                if (null == writeEventArgs)
                {
                    // temp code critical outofmemory
                    return((int)MyErrorCode.OutOfMemory);
                }

                aSocket.EnterIO();

                try
                {
                    // send의 경우 setbuffer 자체가 보낼 버퍼를 지정하는것이다... setbuffer를 다시한번해서 하는게 안전할까?
                    writeEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
                    writeEventArgs.SetBuffer(writeEventArgs.Buffer, writeEventArgs.Offset, length);
                    Array.Copy(data, 0, writeEventArgs.Buffer, writeEventArgs.Offset, length);
                    writeEventArgs.UserToken = aSocket;

                    bool willRaiseEvent = aSocket.TCPClient.Client.SendAsync(writeEventArgs);

                    if (!willRaiseEvent)
                    {
                        ProcessSend(writeEventArgs);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(DateTime.Now.ToString() + " - postingSend " + ex.Message);

                    if (null != writeEventArgs)
                    {
                        writeEventArgs.Completed -= IO_Completed;
                        AsioManager.ReleaseSAEA(writeEventArgs);
                    }

                    ReleaseSocket(aSocket);
                }
            }
            return(0);
        }