如果使用.NET Framework的话,在Socket类中有个Connected属性可以获得当前的socket连接状态。
client->Connect( anEndPoint );
if ( !client->Connected )
{
Console::WriteLine( "Winsock error: {0}", Convert::ToString(
System::Runtime::InteropServices::Marshal::GetLastWin32Error() ) );
}
不过根据MSDN的描述,这个属性是从上一个I/O操作中获取的。如果你要在发包前确定连接的当前状态,它的建议是:
请进行非阻止、零字节的 Send 调用。如果该调用成功返回或引发
WAEWOULDBLOCK 错误代码
(10035),则该套接字仍然处于连接状态;否则,该套接字不再处于连接状态。
可能这个讨论对你的问题也有所帮助。