C# でソケット サーバーを構築していますが、予定外のソケットの切断に問題があります。今のところ、私はこれを次のように処理しています:
private List<TCPClient> _acceptedClientsList = new List<TCPClient>();
public void checkIfStillConnected()
{
while (true)
{
lock (_sync)
{
for (int i = 0; i < _acceptedClientsList.Count(); ++i)
{
if (_acceptedClientsList[i].Client.Client.Poll(10, SelectMode.SelectRead) == true && (_acceptedClientsList[i]).Client.Client.Available == 0) // 5000 is the time to wait for a response, in microseconds.
{
NHDatabaseHandler dbHandler = new NHDatabaseHandler();
dbHandler.Init();
if (_acceptedClientsList[i].isVoipClient == true)
{
dbHandler.UpdateUserStatus(_acceptedClientsList[i].UserName, EStatus.Offline);
}
RemoveClient(i); // this function removes the selected client at i from the acceptedClientsList
i--;
}
}
}
}
}
しかし、これはまったく最適化されていません。これは、socket.poll を使用してすべてのソケットのステータスを毎回無限にチェックするスレッドです...
それが最善かどうかはわかりませんが... 重くて変な感じです。誰にもアイデアがありますか?
ありがとう