HRESULT Library_spot_net_native_Microsoft_SPOT_Net_SocketNative::SockNameHelper( CLR_RT_StackFrame& stack, bool fPeer )
{
    NATIVE_PROFILE_CLR_NETWORK();
    TINYCLR_HEADER();

    CLR_RT_HeapBlock* socket = stack.Arg0().Dereference();
    CLR_INT32 handle;
    CLR_INT32 ret;
    
    struct SOCK_sockaddr addr;
    CLR_INT32 addrLen = sizeof(addr);

    FAULT_ON_NULL(socket);
    handle = socket[ FIELD__m_Handle ].NumericByRef().s4;

    if(fPeer)
    {
        ret = SOCK_getpeername( handle, &addr, &addrLen );
    }
    else
    {
        ret = SOCK_getsockname( handle, &addr, &addrLen );
    }
    
    TINYCLR_CHECK_HRESULT(ThrowOnError( stack, ret ));

    TINYCLR_CHECK_HRESULT(MarshalSockAddress( stack.Arg1(), &addr, addrLen ));
    
    TINYCLR_NOCLEANUP();
}
Esempio n. 2
0
int getpeername(int s, struct sockaddr *asa, int *alen)
{ struct SocketSettings *lss;
  StdFileDes *fp = _lx_fhfromfd(s);
  int rc;

  switch (lss=_lx_get_socket_settings(),lss->lx_network_type) {
    case LX_AS225:
      rc = SOCK_getpeername(fp->lx_sock,asa,alen);
    break;

    case LX_AMITCP:
      rc = TCP_GetPeerName(fp->lx_sock,asa,alen);
    break;

    default:
      rc = -1;
    break;
  }

  return rc;
}