método de notificação de desconexão de soquete
procurei apenas uma solução possível para identificar quando o cliente desconecta. Eu achei isto:
public bool IsConnected( Socket s)
{
try
{
return !(s.Poll(1, SelectMode.SelectRead) &&s.Available == 0);
}
catch (SocketException) { return false; }
}
Estou usando um loop while no meu main com thread.sleep (500) e executando o método Isconnected, ele funciona bem quando eu o executo no visual studio e quando clico em parar de depurar ele realmente me notifica no programa do lado do servidor, mas quando eu apenas vou para o exe no diretório bin e inicie-o - é, de fato, me avise sobre uma conexão, mas quando fecho o programa (manualmente a partir do botão 'x') ou através do gerenciador de tarefas, oIsConnected
método aparentemente retorna ainda verdadeiro ..... estou usando uma conexão tcp simples
client = new TcpClient();
client.Connect("10.0.0.2", 10);
servidor:
Socket s = tcpClient.Client;
while(true)
{
if (!IsConnected(s))
MessageBox.Show("disconnected");
}
(está sendo executado em um thread btw).
alguma sugestão pessoal? Eu até tentei fechar a conexão quando o cliente fecha:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
client.Close();
s.Close();
Environment.Exit(0);
}
não sei o que fazer