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(); }
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; }