如何以非root用户连接root用户建立的af_local类型的socket?

laomai 2006-11-20 02:07:09
最近在学习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出错,请大家看看,谢谢!
...全文
618 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
laomai 2006-11-23
  • 打赏
  • 举报
回复
在猪头的帮助下搞定,在bind结束后加一句
chmod(UNIXPATH, "0777")即可
playmud 2006-11-20
  • 打赏
  • 举报
回复
3?
playmud 2006-11-20
  • 打赏
  • 举报
回复
2
playmud 2006-11-20
  • 打赏
  • 举报
回复
1

23,215

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧