sockaddr_un使用
时间: 2025-06-22 14:37:28 AIGC 浏览: 21
### 使用 `sockaddr_un` 结构进行 Unix 域套接字编程
#### 创建服务器端程序
为了创建一个基于 Unix 域的服务器,需要初始化并绑定 `sockaddr_un` 类型地址到监听套接字。
```c
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
int main() {
int sockfd;
struct sockaddr_un addr;
// 创建流式套接字 (SOCK_STREAM)
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX; // 设置协议族为AF_UNIX
strncpy(addr.sun_path, "/tmp/mysocket", sizeof(addr.sun_path)-1); // 定义路径名
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)); // 绑定地址
listen(sockfd, 5);
}
```
当设置 `sun_path` 成员时需要注意字符串长度不可超过系统规定的最大值[^1]。通常情况下该字段存储绝对路径或相对路径来唯一标识通信端点。
对于客户端来说,则要连接至上述指定位置的服务进程:
```c
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
int main(){
int sockfd;
struct sockaddr_un addr;
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, "/tmp/mysocket", sizeof(addr.sun_path)-1);
connect(sockfd,(struct sockaddr *)&addr,sizeof(addr)); // 连接到服务端
}
```
一旦建立了连接,双方就可以通过读写操作来进行数据交换了。值得注意的是,在使用完毕之后应当调用 `unlink()` 函数删除由 `sun_path` 所指向文件系统的节点以清理资源。
阅读全文
相关推荐




















