我有代码:
#define SOCK_PATH "/Users/piotr/swigo.sock"
int ux_server_socket() {
const int fd = socket(AF_UNIX, SOCK_STREAM, 0);
if (fd == -1) {
printf("%s\n", strerror(errno));
return -1;
}
struct sockaddr_un addr;
bzero(&addr, sizeof(addr));
addr.sun_len = sizeof(addr);
addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, SOCK_PATH);
if (unlink(addr.sun_path) == -1) {
printf("unlink: %s\n", strerror(errno));
}
int retv = bind(fd, (struct sockaddr*)&addr, (socklen_t)SUN_LEN(&addr));
if (retv == -1) {
printf("bind: %s\n", strerror(errno));
return -1;
}
printf("valid socket: %d\n", fd);
return fd;
}
当我在Xcode中使用C语言创建项目时,此代码可以正常运行(在控制台中显示:有效套接字:3)。但是,当我在Swift(Cocoa App)中创建一个项目时,我使用此函数(以及相应的文件h和桥接头文件)向项目添加了一个C文件,但是有些东西不起作用。 我在控制台中看到了消息:
unlink: Operation not permitted
bind: Address already in use
为什么这个有效的C代码不适用于Swift项目 - 任何想法?
答案 0 :(得分:0)
这是sandbox的问题,有效的解决方案是Ken Thomases在另一项任务中的想法,我需要设置两个复选框(App Sandbox,Network:Incoming Connections(Server)和Outgoing Connections(Client)):