在OS-X下,我有一个名为“ listener”的进程,该进程正在等待“ accept”以从名为listener_socket的本地unix套接字读取数据。不幸的是,任何尝试连接该套接字的尝试都将以“拒绝连接”错误终止。
使用lsof来确保“侦听器”实际上侦听此套接字:
sudo lsof -p 570
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
listener 570 root 3u unix 0x48a2751a1bad61ef 0t0 /private/var/run/my_sockets/listener_socket
注意,该文件实际上是有效的unix套接字:
file /private/var/run/my_sockets/listener_socket /private/var/run/my_sockets/listener_socket: socket
但是,即使我正在使用类似命令(使用socat命令)的替代方式,它仍然无法连接
sudo socat LOCAL:/private/var/run/my_sockets/listener_socket,interval=1 EXEC:'aaaaaaaaaaaaaaaaa',nofork
2015/11/23 00:57:33 socat[928] E connect(3, LEN=49 AF=1 "/private/var/run/my_sockets/listener_socket", 49): Connection refused
也许我可以做更多的工作来弄清楚为什么我无法将数据发送到套接字,即使很明显“侦听器”正在另一端等待该数据?
这是我的代码的相关部分:
发件人:
sockfd = socket(PF_UNIX, SOCK_STREAM, 0);
address.sun_family = AF_UNIX;
snprintf(address.sun_path, UNIX_PATH_MAX, "%s", LISTENER_SOCKET_PATH);
connect(sockfd, (struct sockaddr *) &address, sizeof(struct sockaddr_un)
write ...
接收者:
fd = socket(PF_UNIX, SOCK_STREAM, 0);
unlink(sock_name); // in case the socket is used before
listen(server->fd, 5); // we don't reach 5 listeners for sure ...
chmod(sock_name, mode); // giving root privilages
accept(server->fd, (struct sockaddr *) &server->address, &server->address_length);
read ...
谢谢
服务器似乎错过bind()
了在监听套接字上的调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句