Как вы определяете PID однорангового TCP-соединения на одном устройстве iOS?

По соображениям, которые я бы предпочел не делать (зависит от совместимости с сторонней библиотекой, которую я не могу изменить), мне нужно использовать сокет TCP для IPC в рамках одного процесса в iOS.

Чтобы другие процессы не разговаривали с моим сокетом TCP IPC, я хотел бы проверить с ОС, что процесс, вызывающий connect() (из другого потока), имеет тот же PID, что и мой собственный.

В OS X я заметил, что netstat не имеет этой информации (в отличие от других ОС, таких как Windows и Linux), и единственный способ, которым я смог определить эту информацию, - использовать lsof. Я не уверен, что может быть доступно в изолированной программной среде iOS, но пока мне кажется, что мой лучший выбор (даже если это кажется дорогим) заключается в том, чтобы выяснить, что делает lsof, и попытаться его воспроизвести.

Кто-нибудь знает о системном вызове, который я могу использовать, чтобы проверить это? Я уже прочитал getsockopt(2) и не вижу ничего, что применимо, и я не могу найти документацию о том, что поддерживает ioctl(2).

Что может быть возможно здесь?

1 ответ

Ничего себе, это звучит как ужасный API для встроенной библиотеки.

getpeername на принимающей стороне должен соответствовать getsockname отправляющего конца. Вы можете попытаться сопоставить его со всеми открытыми файлами в локальном процессе.

licensed under cc by-sa 3.0 with attribution.