]> git.proxmox.com Git - mirror_edk2.git/blobdiff - StdLib/EfiSocketLib/Tcp4.c
Better handle transmit errors
[mirror_edk2.git] / StdLib / EfiSocketLib / Tcp4.c
index 2840dd7e0e9bde9119aec8889de3957737eb1b33..b489608a5bac5c26687c5c87c2906205c8cdfc9e 100644 (file)
@@ -2448,13 +2448,21 @@ EslTcpReceive4 (
           && ( 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
@@ -2481,7 +2489,6 @@ EslTcpReceive4 (
             pSocket->errno = ENOPROTOOPT;\r
             break;\r
           }\r
-          pSocket->RxError = EFI_SUCCESS;\r
         }\r
         else {\r
           Status = EFI_NOT_READY;\r