1 /** @file
2   Implement the read 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   Read support routine for sockets
20 
21   The BslSocketRead routine is called indirectly by the read file
22   system routine.  This routine is typically used for SOCK_STREAM
23   because it waits for receive data from the target system specified
24   in the ::connect call.
25 
26   @param [in] pDescriptor   Descriptor address for the file
27   @param [in] pOffset       File offset
28   @param [in] LengthInBytes Number of bytes to read
29   @param [in] pBuffer       Address of the buffer to receive the data
30 
31   @return   The number of bytes read or -1 if an error occurs.
32             In the case of an error, ::errno contains more details.
33 
34 **/
35 ssize_t
36 EFIAPI
BslSocketRead(struct __filedes * pDescriptor,off_t * pOffset,size_t LengthInBytes,void * pBuffer)37 BslSocketRead (
38   struct __filedes *pDescriptor,
39   off_t * pOffset,
40   size_t LengthInBytes,
41   void * pBuffer
42   )
43 {
44   ssize_t BytesRead;
45 
46   //
47   //  Receive the data from the remote system
48   //
49   BytesRead = recvfrom ( pDescriptor->MyFD,
50                          pBuffer,
51                          LengthInBytes,
52                          0,
53                          NULL,
54                          NULL );
55 
56   //
57   //  Return the number of bytes read
58   //
59   return BytesRead;
60 }
61