Можно ли закрыть сокет с помощью какой-либо команды / программы оболочки? Я видел множество примеров манипулирования сокетами с помощью C и других языков, но не смог найти программу, посвященную этому.
В основном это происходит из любопытства, а не из реальной необходимости. Хотя это может быть полезно для стресс-тестирования моего приложения или закрытия TCP-сокета, который я не хочу открывать.
Меня в основном интересует Linux / Unix, но было бы неплохо сделать это и в Windows.
Вы можете закрыть сокет в sh, как и любой другой файл: exec 42>&-
где 42 - дескриптор файла. Что вы не можете сделать (за исключением нескольких оболочек, которые предоставляют для него расширения), так это открыть сокет. Но, конечно, это закрывает сокет в оболочке, а не в другом процессе.
Закрытие сокета в запущенном процессе нарушило бы его поведение, чего не ожидал автор программы - это как войти и изменить часть памяти. Тем не менее, это можно сделать, подключившись к процессу с помощью отладчика и заставив его выполнить вызов API закрытия сокета (это будет close
или shutdown
системный вызов в unix).