//\r
// Verify the port connection\r
//\r
- pTcp4Protocol = pPort->pProtocol.TCPv4;\r
Status = pTcp4Protocol->GetModeData ( pTcp4Protocol,\r
NULL,\r
NULL,\r
//\r
// Port is not connected to the network\r
//\r
- Status = EFI_NO_MEDIA;\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
ESL_PORT * pPort;\r
ESL_TCP6_CONTEXT * pTcp6;\r
EFI_TCP6_PROTOCOL * pTcp6Protocol;\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 = pTcp6Protocol->Connect ( pTcp6Protocol,\r
- &pTcp6->ConnectToken );\r
+ Status = pTcp6Protocol->GetModeData ( pTcp6Protocol,\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
+ pTcp6->ConnectToken.CompletionToken.Status = EFI_NO_MEDIA;\r
+\r
+ //\r
+ // Continue with the next port\r
+ //\r
+ gBS->CheckEvent ( pTcp6->ConnectToken.CompletionToken.Event );\r
+ gBS->SignalEvent ( pTcp6->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 = pTcp6Protocol->Connect ( pTcp6Protocol,\r
+ &pTcp6->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