Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定同一iOS设备上对等TCP连接的PID?_C_Ios_Tcp_Sockets - Fatal编程技术网

如何确定同一iOS设备上对等TCP连接的PID?

如何确定同一iOS设备上对等TCP连接的PID?,c,ios,tcp,sockets,C,Ios,Tcp,Sockets,出于我不想讨论的原因(与我无法更改的第三方库的兼容性有关),我需要使用TCP套接字在iOS中的单个进程内执行IPC 为了防止其他进程与我的TCP IPC套接字通信,我想用操作系统验证调用connect()(从另一个线程)的进程是否与我自己的进程具有相同的PID 在OSX上,我注意到netstat没有此信息(与Windows和Linux等其他操作系统不同),我能够确定此信息的唯一方法是使用lsof。我不确定iOS沙盒中可能有什么可用的功能,但到目前为止,我的最佳选择(尽管它似乎很昂贵)似乎是找出l

出于我不想讨论的原因(与我无法更改的第三方库的兼容性有关),我需要使用TCP套接字在iOS中的单个进程内执行IPC

为了防止其他进程与我的TCP IPC套接字通信,我想用操作系统验证调用
connect()
(从另一个线程)的进程是否与我自己的进程具有相同的PID

在OSX上,我注意到
netstat
没有此信息(与Windows和Linux等其他操作系统不同),我能够确定此信息的唯一方法是使用
lsof
。我不确定iOS沙盒中可能有什么可用的功能,但到目前为止,我的最佳选择(尽管它似乎很昂贵)似乎是找出
lsof
在做什么,并尝试复制它

有人知道我可以使用系统调用来检查这个吗?我已经通读了
getsockopt(2)
,没有看到任何适用的内容,也找不到关于支持什么
ioctl(2)
调用的文档


这里可能有什么呢?

哇,对于进程内库来说,这听起来像是一个糟糕的API


接收端的
getpeername
应与发送端的
getsockname
匹配。您可以尝试将其与本地进程中所有打开的FD匹配。

使用sockets API无法做到这一点。你不能用
pipe(2)
来代替创建套接字吗?
socketpair(2)
unix(7)
可能比
pipe(2)
更合适,因为它们实际上的行为类似于套接字。是的,如果你绝对需要tcp开销,这是真的。我完全同意你们两个。如果是我自己设计的,我会使用管道或本地插座。不幸的是,这不是一个选项。@Mike:你找到这个问题的解决方案了吗?我也面临着同样的问题,而你是我的DenverCoder9():)好主意。我曾想过这样做,但放弃了这个想法,因为我认为返回的
struct sockaddr
是不够的。但我忘了它可能是
sockaddr\u in
中的一个
sin\u port
字段。现在我只需要弄清楚如何确定哪些文件描述符是有效的。(我想蛮力可以奏效,但我更愿意得到一个列表)到目前为止,我能想到的最好办法是迭代
getdtablesize()
@Mike:
getdtablesize()
会给你一个蛮力的上限。FreeBSD的
fdescf
可以公开文件描述符(通常位于
/dev/fd/
),iOS可以吗?谢谢你的指针
/dev/fd/*
确实可以在OSX上使用,因此它很有可能在iOS上使用。我会检查的。@Mike:用很多打开的FD再检查一遍。如果没有
fdescfs
,FreeBSD的
devfs
仅显示
/dev/fd/[0-2]