Ubuntu上的套接字(不允许操作)

我是newbee,只是在linux下开始我的第一步。 所以我有一些关于套接字的任务。 我遵循指南,尤其是这一个。 而代码示例不起作用。 我从这开始:

#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #define SOCK_PATH "echo_socket" int main(void) { int s, s2, t, len; struct sockaddr_un local, remote; char str[100]; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } local.sun_family = AF_UNIX; strcpy(local.sun_path, SOCK_PATH); unlink(local.sun_path); len = strlen(local.sun_path) + sizeof(local.sun_family); if (bind(s, (struct sockaddr *)&local, len) == -1) { perror("bind"); exit(1); } return 0; } 

我已经想通了,编译它(Code :: Blocks),必须有一个包括:

 #include <unistd.h> 

但成功运行后,我得到消息“绑定:操作不允许”。 哪里不对? 我试图在root下运行它,但仍然无法正常工作。

Solutions Collecting From Web of "Ubuntu上的套接字(不允许操作)"

一些Unix系统不允许你在任何地方创建套接字。 确保你有正确的权限和正确的文件系统下面。 (Fat32在手机SD卡上使用时,不允许附加标志文件,可能会让你陷入困境)最后,在新系统上有安全的东西像selinux运行,这可能会阻止套接字的创建。

在我的例子中,我不得不改变

 #define SOCK_PATH "echo_socket" 

 #define SOCK_PATH "/dev/socket/echo_socket" 

之后,它立即工作。 (可执行文件在根shell中启动)

由于没有权限。 你可以#define SOCK_PATH "/home/username/echo_socket" ,它会正常运行。