使用 @ 了解套接字路径(抽象套接字)
Understanding Socket paths with @ (Abstract Sockets)
套接字路径中的@
是什么?
我正在使用 LocalServerSocket()
打开一个 unix 套接字。
root@device:/dev/socket # netstat -a
.......
Proto RefCnt Flags Type State I-Node Path
Active UNIX domain sockets (servers and established)
unix 2 [ ACC ] STREAM LISTENING 37305 @/storage/my_sock
unix 20 [ ] DGRAM 7231 /dev/socket/logdw
unix 2 [ ACC ] SEQPACKET LISTENING 7234 /dev/socket/logdr
unix 2 [ ACC ] STREAM LISTENING 7236 /dev/socket/logd
.......
与其他套接字不同,我的套接字带有 @
前缀。另外,我去检查了 /storage
分区。我在那里找不到生成的套接字。
我创建套接字的代码如下所示。
LocalServerSocket lss = new LocalServerSocket("/storage/my_sock");
LocalSocket sock = lss.accept();
InputStream ins = sock.getInputStream();
我的想法是从 Java 打开一个本地服务器套接字,并将其用作与本机 C 应用程序交互的通信通道。但是由于路径无效,我无法实现。
unix套接字路径中的@表示它们是抽象套接字。在磁盘上物理上看不到抽象套接字。在 android LocalServerSocket()
中创建抽象套接字。
Android :
LocalServerSocket lss = new LocalServerSocket("my_sock");
LocalSocket sock = lss.accept();
InputStream ins = sock.getInputStream();
母语:
为了从本机应用程序打开相同的抽象套接字,定义 sun_path
如下。
sock.sun_family = AF_UNIX;
sock.sun_path[0] = '[=11=]'
strcpy(&sock.sun_path[1], "my_sock");
sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
len_addr = offsetof(struct sockaddr_un, sun_path) + strlen("my_sock") + 1;
res = connect(sock_fd, (struct sockaddr *)&sock, len_addr);
请注意,sun_path
的第一个字节是'\0',实际名称从&sun_path[1]
继续。按照这种命名套接字的命名规范,系统识别出我们要操作的是一个抽象套接字,并为我们提供了一个。
套接字路径中的@
是什么?
我正在使用 LocalServerSocket()
打开一个 unix 套接字。
root@device:/dev/socket # netstat -a
.......
Proto RefCnt Flags Type State I-Node Path
Active UNIX domain sockets (servers and established)
unix 2 [ ACC ] STREAM LISTENING 37305 @/storage/my_sock
unix 20 [ ] DGRAM 7231 /dev/socket/logdw
unix 2 [ ACC ] SEQPACKET LISTENING 7234 /dev/socket/logdr
unix 2 [ ACC ] STREAM LISTENING 7236 /dev/socket/logd
.......
与其他套接字不同,我的套接字带有 @
前缀。另外,我去检查了 /storage
分区。我在那里找不到生成的套接字。
我创建套接字的代码如下所示。
LocalServerSocket lss = new LocalServerSocket("/storage/my_sock");
LocalSocket sock = lss.accept();
InputStream ins = sock.getInputStream();
我的想法是从 Java 打开一个本地服务器套接字,并将其用作与本机 C 应用程序交互的通信通道。但是由于路径无效,我无法实现。
@表示它们是抽象套接字。在磁盘上物理上看不到抽象套接字。在 android LocalServerSocket()
中创建抽象套接字。
Android :
LocalServerSocket lss = new LocalServerSocket("my_sock");
LocalSocket sock = lss.accept();
InputStream ins = sock.getInputStream();
母语:
为了从本机应用程序打开相同的抽象套接字,定义 sun_path
如下。
sock.sun_family = AF_UNIX;
sock.sun_path[0] = '[=11=]'
strcpy(&sock.sun_path[1], "my_sock");
sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
len_addr = offsetof(struct sockaddr_un, sun_path) + strlen("my_sock") + 1;
res = connect(sock_fd, (struct sockaddr *)&sock, len_addr);
请注意,sun_path
的第一个字节是'\0',实际名称从&sun_path[1]
继续。按照这种命名套接字的命名规范,系统识别出我们要操作的是一个抽象套接字,并为我们提供了一个。