ESL_PORT * pPort;\r
ESL_TCP4_CONTEXT * pTcp4;\r
EFI_TCP4_PROTOCOL * pTcp4Protocol;\r
+ EFI_SIMPLE_NETWORK_MODE SnpModeData;\r
EFI_STATUS Status;\r
\r
DBG_ENTER ( );\r
pPort->bConfigured = TRUE;\r
\r
//\r
- // Attempt the connection to the remote system\r
+ // Verify the port connection\r
//\r
- Status = pTcp4Protocol->Connect ( pTcp4Protocol,\r
- &pTcp4->ConnectToken );\r
+ Status = pTcp4Protocol->GetModeData ( pTcp4Protocol,\r
+ NULL,\r
+ NULL,\r
+ NULL,\r
+ NULL,\r
+ &SnpModeData );\r
+ if ( !EFI_ERROR ( Status )) {\r
+ if ( SnpModeData.MediaPresentSupported\r
+ && ( !SnpModeData.MediaPresent )) {\r
+ //\r
+ // Port is not connected to the network\r
+ //\r
+ pTcp4->ConnectToken.CompletionToken.Status = EFI_NO_MEDIA;\r
+\r
+ //\r
+ // Continue with the next port\r
+ //\r
+ gBS->CheckEvent ( pTcp4->ConnectToken.CompletionToken.Event );\r
+ gBS->SignalEvent ( pTcp4->ConnectToken.CompletionToken.Event );\r
+\r
+ //\r
+ // Connection in progress\r
+ //\r
+ Status = EFI_SUCCESS;\r
+ }\r
+ else {\r
+ //\r
+ // Attempt the connection to the remote system\r
+ //\r
+ Status = pTcp4Protocol->Connect ( pTcp4Protocol,\r
+ &pTcp4->ConnectToken );\r
+ }\r
+ }\r
if ( !EFI_ERROR ( Status )) {\r
//\r
// Connection in progress\r
pSocket->errno = ETIMEDOUT;\r
break;\r
\r
+ case EFI_NO_MEDIA:\r
case EFI_NETWORK_UNREACHABLE:\r
pSocket->errno = ENETDOWN;\r
break;\r
DataLength ));\r
CopyMem ( pBuffer, pPacket->pBuffer, DataLength );\r
\r
+ //\r
+ // Set the next buffer address\r
+ //\r
+ pBuffer += DataLength;\r
+\r
//\r
// Determine if the data is being read\r
//\r