Fix send to properly wait while long transmits are in progress

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12083 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lpleahy 2011-08-03 17:45:52 +00:00
parent 1e2b43f1e2
commit 486aace42c
2 changed files with 3 additions and 49 deletions

View File

@ -44,54 +44,8 @@ send (
int flags
)
{
ssize_t LengthInBytes;
CONST UINT8 * pData;
struct __filedes * pDescriptor;
EFI_SOCKET_PROTOCOL * pSocketProtocol;
EFI_STATUS Status;
//
// Assume failure
// Send the data
//
LengthInBytes = -1;
//
// Locate the context for this socket
//
pSocketProtocol = BslFdToSocketProtocol ( s,
&pDescriptor,
&errno );
if ( NULL != pSocketProtocol ) {
//
// Send the data using the socket
//
pData = buffer;
do {
errno = 0;
Status = pSocketProtocol->pfnSend ( pSocketProtocol,
flags,
length,
pData,
(size_t *)&LengthInBytes,
NULL,
0,
&errno );
if ( EFI_ERROR ( Status )) {
LengthInBytes = -1;
break;
}
//
// Account for the data sent
//
pData += LengthInBytes;
length -= LengthInBytes;
// TODO: Add non-blocking check
} while (( 0 != length ) && ( EFI_NOT_READY == Status ));
}
//
// Return the number of data bytes sent, -1 for errors
//
return (INT32)LengthInBytes;
return sendto ( s, buffer, length, flags, NULL, 0 );
}

View File

@ -82,7 +82,7 @@ sendto (
to,
tolen,
&errno );
if ( EFI_ERROR ( Status )) {
if ( EFI_ERROR ( Status ) && ( EFI_NOT_READY != Status )) {
LengthInBytes = -1;
break;
}