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:
parent
1e2b43f1e2
commit
486aace42c
@ -44,54 +44,8 @@ send (
|
|||||||
int flags
|
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;
|
return sendto ( s, buffer, length, flags, NULL, 0 );
|
||||||
|
|
||||||
//
|
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ sendto (
|
|||||||
to,
|
to,
|
||||||
tolen,
|
tolen,
|
||||||
&errno );
|
&errno );
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status ) && ( EFI_NOT_READY != Status )) {
|
||||||
LengthInBytes = -1;
|
LengthInBytes = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user