【发布时间】:2016-11-06 04:53:50
【问题描述】:
我有一个监听 unix 套接字的进程。 但是,在阅读之前,我想检查有关此传入消息的一些元数据,例如它的源进程(例如,我想删除来自不受信任的发件人的消息)。是否有任何系统调用可以检索此信息。
if(listen(sock_fd, 10) != 0) {
assert("listen failed");
}
while((conn_fd = accept(sock_fd,
(struct sockaddr *) &address,
&address_length)) != -1) {
int nbytes = 0;
static char buffer[PAYLOAD_SZ];
nbytes = (int)read(conn_fd, buffer, PAYLOAD_SZ);
【问题讨论】:
-
受信任基于什么?
-
顺便说一句,它闻起来像 XY problem。那么你真正的目标是什么?你想达到什么目标?可能是第一次握手,连接接受后,你的解决方案?我的意思是客户端请求连接,并且基于某些东西,服务器接受或关闭连接。
-
@LPs,感谢您的评论。也许我的措辞不够清楚。我想允许根据预定义的列表读取来自特定进程(pids)的消息。因此,当我从套接字队列中弹出一条新消息时,我想验证它的来源。
-
好吧,你怎么会有一个预定义列表的pid?这些进程是否修复了 PID?如果不是,正如我评论的那样,不能成为接受连接的解决方案,要求 PID 号和密码/哈希/验证连接,然后将特定连接添加到白名单?
-
@LPs,预定义的列表是固定的,它作为监听器进程的输入。
标签: c macos sockets unix-socket xnu