Рассмотрим следующий код:
// module level declaration
Socket _client;
void ProcessSocket() {
    _client = GetSocketFromSomewhere();
    using (_client) {
        DoStuff();  // receive and send data
        Close();
    }
}
void Close() {
    _client.Close();
    _client = null;
}
Учитывая, что код вызывает метод Close(), который закрывает сокет _client и устанавливает его на null, но все же внутри блока `using ', что именно происходит за кулисами? Действительно ли розетка закрыта? Есть ли побочные эффекты?
P.S. Это использует С# 3.0 в .NET MicroFramework, но я полагаю, что С#, язык, должен функционировать одинаково. Причина, по которой я спрашиваю, заключается в том, что иногда, очень редко, у меня заканчиваются сокеты (что очень ценный ресурс на устройствах .NET MF).
