Назад | Перейти на главную страницу

Можно ли закрыть сокет с помощью команды оболочки?

Можно ли закрыть сокет с помощью какой-либо команды / программы оболочки? Я видел множество примеров манипулирования сокетами с помощью C и других языков, но не смог найти программу, посвященную этому.

В основном это происходит из любопытства, а не из реальной необходимости. Хотя это может быть полезно для стресс-тестирования моего приложения или закрытия TCP-сокета, который я не хочу открывать.

Меня в основном интересует Linux / Unix, но было бы неплохо сделать это и в Windows.

Вы можете закрыть сокет в sh, как и любой другой файл: exec 42>&- где 42 - дескриптор файла. Что вы не можете сделать (за исключением нескольких оболочек, которые предоставляют для него расширения), так это открыть сокет. Но, конечно, это закрывает сокет в оболочке, а не в другом процессе.

Закрытие сокета в запущенном процессе нарушило бы его поведение, чего не ожидал автор программы - это как войти и изменить часть памяти. Тем не менее, это можно сделать, подключившись к процессу с помощью отладчика и заставив его выполнить вызов API закрытия сокета (это будет close или shutdown системный вызов в unix).