如何以非root用户连接root用户建立的af_local类型的socket?
最近在学习apue的unix domain socket,写了一个简单的server和client,如何都以root用户编译和执行,没问题,而如果以root执行server,以非root执行client,则connect时会提示connect error: Permission denied
,希望有知道的兄弟能告诉解决办法。
下面是我的server和client的部分代码,已去掉了错误处理函数,也希望大家指 正一下
//server端
#define UNIXPATH "/tmp/jddm.socket"
int listenfd= socket(AF_LOCAL, SOCK_STREAM, 0));
struct sockaddr_un servaddr = {0};
servaddr.sun_family = AF_LOCAL;
strcpy(servaddr.sun_path, unixpath);
bind(listenfd, (struct sockaddr*)& servaddr, sizeof(servaddr));
(listen(listenfd, 5);
for(;;){
connfd = accept(listenfd, NULL, NULL)); int len = RecvRequest(connfd, buf, sizeof(buf)); //接收客户端请求
printf("%d th: recv %d bytes\n", count, len);
close(connfd);
}
close(listenfd);
//客户端
struct sockaddr_un servaddr={0};
int sockfd = socket(AF_LOCAL, SOCK_STREAM, 0);
servaddr.sun_family = AF_LOCAL;
strcpy(servaddr.sun_path, pathname);
if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)
{
printf("connect error: %s\n", strerror(errno));
return -1;
}
现在就是以非root用户执行client时connect出错,请大家看看,谢谢!