1 /** @file
2 Implement the getsockname 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 local socket address.
20
21 The getsockname routine retrieves the local system address from the socket.
22
23 The
24 <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockname.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 local system address
30
31 @param [in] address_len Length of the local 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
getsockname(int s,struct sockaddr * address,socklen_t * address_len)38 getsockname (
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 local socket address
60 //
61 Status = pSocketProtocol->pfnGetLocal ( 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