&& ( NULL == pSocket->pRxPacketListHead )\r
&& ( NULL == pSocket->pRxOobPacketListHead )) {\r
Status = pSocket->RxError;\r
+ pSocket->RxError = EFI_SUCCESS;\r
switch ( Status ) {\r
default:\r
pSocket->errno = EIO;\r
break;\r
\r
case EFI_CONNECTION_FIN:\r
- pSocket->errno = ESHUTDOWN;\r
+ //\r
+ // Continue to return zero bytes received when the\r
+ // peer has successfully closed the connection\r
+ //\r
+ pSocket->RxError = EFI_CONNECTION_FIN;\r
+ *pDataLength = 0;\r
+ pSocket->errno = 0;\r
+ Status = EFI_SUCCESS;\r
break;\r
\r
case EFI_CONNECTION_REFUSED:\r
pSocket->errno = ENOPROTOOPT;\r
break;\r
}\r
- pSocket->RxError = EFI_SUCCESS;\r
}\r
else {\r
Status = EFI_NOT_READY;\r