Home | History | Annotate | Download | only in BsdSocketLib
      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
     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