Лет эдак 8 назад я занимался внедрением сией чудесной feature в ПО. Это какой-то кошмар.
У мелкомягких это было реализовано кажется по технологии COM.
Т.е. пишем (грубо говоря)
Код:
if (SUCCEEDED(InitializeInterface))
if (SUCCEEDED(Еще что-то делаем))
.... ; Пятидесятый уровень вложенности
if (SUCCEEDED(делаем проброс порта))
else CloseHandle(a);
else CloseHandle(b);
else CloseHandle(c);
И так далее.
И вот ты это дело запускаешь - а оно не работает. Сначала я делал без всех этих Close - но так - вообще не работало. Ну тоесть как... Оно или срабатывает с первого раза - или не срабатывает вообще.
Сообщения которые отдает тебе свитч ты не видишь. Просто видишь ошибку которая ни о чем не говорит и все. Мне нельзя было юзать более другие либы, нужно было то, что идет в комплекте с Вендой и ни либой больше.
Это какой-то ад. И вот чтобы как-то работало - вот все эти действия надо поместить в цикл и однажды оно срабатывало. Ну какбэ работает.
До сих пор не знаю как работает сея технология по rfc - ибо после того как я этим отзанимался - больше и близко к ней не подходил.
======================
Но есть мнение что таки багов там больше чем в данном disclosure.
UPD:
А нет, даже не так. Там надо было закрыть все хендлы которые ты открыл до этого, поэтому все решалось через goto. Тоесть идет список закрытий хендлов и ты через goto после else закрываешь все что успел наоткрывать.
Можно конечно (нужно тоесть) использовать объектный подход - но это в том случае если у тебя есть возможность подключить соответствующую либу.