iWARPEM_Multiplexed_Endpoint_t( int aRouterFd = 0,
                                    int aMaxClientCount = IT_API_MULTIPLEX_MAX_PER_SOCKET,
                                    iWARPEM_Object_Accept_t *aListenerCtx = NULL )
        : mClientCount(0), mRouterConnFd( aRouterFd ), mMaxClientCount( aMaxClientCount ),
          mReceiveDataLen( 0 ), mPendingRequests( 0 ), mNeedsBufferFlush( false )
    {
        bzero( &mRouterInfo, sizeof( iWARPEM_Router_Info_t ));

        mClientEPs = new MultiplexedConnectionType*[ aMaxClientCount ];
        bzero( mClientEPs, sizeof( MultiplexedConnectionType*) * aMaxClientCount );

        pthread_spin_init( &mAccessLock, PTHREAD_PROCESS_PRIVATE );
        mListenerContext = aListenerCtx;
        mSendBuffer = new SocketBufferType();
        mReceiveBuffer = new ReceiveBufferType();
        mReceiveBuffer->ConfigureAsReceiveBuffer();

        ResetSendBuffer();
        ResetRecvBuffer();

        BegLogLine( FXLOG_IT_API_O_SOCKETS_MULTIPLEX_LOG )
                << "Creating multiplexed router endpoint..."
                << " socket: " << mRouterConnFd
                << " maxClients: " << aMaxClientCount
                << " BufferSizes: " << IT_API_MULTIPLEX_SOCKET_BUFFER_SIZE
                << " Recv: @" << (void*)mReceiveBuffer
                << " Send: @" << (void*)mSendBuffer
                << EndLogLine;
#ifdef MULTIPLEX_STATISTICS
        mMsgCount = 0;
        mFlushCount = 0;
        mMsgAvg = 1.0;
#endif
    }
void zSocket::BeginReadNewMessage()
{
	ResetRecvBuffer();
	asio::async_read(socket_,
		asio::buffer(recvBuffer_,PH_LEN),
		strand_.wrap(boost::bind(
		//&zSocket::HandleReadHead, shared_from_this(),
		&zSocket::HandleReadHead, this,
		asio::placeholders::error)));
}