1 /** @file 2 Implement the getpeername API. 3 4 Copyright (c) 2011, Intel Corporation 5 All rights reserved. This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #include <SocketInternals.h> 16 17 18 /** 19 Get the remote address 20 21 The getpeername routine retrieves the remote system address from the socket. 22 23 The 24 <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/getpeername.html#">POSIX</a> 25 documentation is available online. 26 27 @param [in] s Socket file descriptor returned from ::socket. 28 29 @param [out] address Network address to receive the remote system address 30 31 @param [in] address_len Length of the remote network address structure 32 33 @return This routine returns zero (0) if successful or -1 when an error occurs. 34 In the case of an error, ::errno contains more details. 35 36 **/ 37 int 38 getpeername ( 39 int s, 40 struct sockaddr * address, 41 socklen_t * address_len 42 ) 43 { 44 int RetVal; 45 EFI_SOCKET_PROTOCOL * pSocketProtocol; 46 EFI_STATUS Status; 47 48 // 49 // Assume failure 50 // 51 RetVal = -1; 52 53 // 54 // Locate the context for this socket 55 // 56 pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno ); 57 if ( NULL != pSocketProtocol ) { 58 // 59 // Get the remote address 60 // 61 Status = pSocketProtocol->pfnGetPeer ( pSocketProtocol, 62 address, 63 address_len, 64 &errno ); 65 if ( !EFI_ERROR ( Status )) { 66 RetVal = 0; 67 } 68 } 69 70 // 71 // Return the operation status 72 // 73 return RetVal; 74 } 75