По причинам, которые я бы предпочел не делать (зависит от совместимости с сторонней библиотекой, которую я не могу изменить), мне нужно использовать сокет TCP для IPC в рамках одного процесса в iOS.Как определить PID однорангового TCP-соединения на одном устройстве iOS?
Чтобы предотвратить другие процессы, связанные с моим TCP-сокером IPC, я хотел бы проверить с ОС, что процесс, вызывающий connect()
(из другого потока), имеет тот же PID, что и мой собственный.
О OS X Я заметил, что netstat
не имеет этой информации (в отличие от других ОС, таких как Windows и Linux), и единственный способ, которым я смог определить эту информацию, - использовать lsof
. Я не уверен, что может быть доступно в песочнице iOS, но пока мне кажется, что мой лучший выбор (даже если это кажется дорогим) заключается в том, чтобы выяснить, что делает lsof
, и попытаться его воспроизвести.
Кто-нибудь знает о системном вызове, который я могу использовать, чтобы проверить это? Я уже прочитал getsockopt(2)
и не вижу ничего, что применимо, и я не могу найти документацию о том, что поддерживает ioctl(2)
.
Что может быть возможно здесь?
Невозможно сделать это с помощью API сокетов. Не можете ли вы использовать 'pipe (2)' вместо создания сокета? –
'socketpair (2)' или 'unix (7)' может быть лучше подходит, чем 'pipe (2)', поскольку они фактически ведут себя как сокеты. – ephemient
Да, верно, если вам абсолютно необходимо, чтобы накладные расходы tcp. –