PF_UNIX (也称作 PF_LOCAL ) 套接字族用来在同一机器上的提供有效的进程间通讯.Unix 套接字可以是匿名的(由 socketpair(2)创建), 也可以与套接字类型文件相关联. Linux 还支持一种抽象名字空间, 它是独立于文件系统的. 有效的类型有: SOCK_STREAM 用于面向流的套接字, SOCK_DGRAM 用于面向数据报的套接字...
建议:对于socketpair与socket的domain参数,使用PF_LOCAL系列,而在初始化套接口地址结构时,则使用AF_LOCAL. 例如:z = socket(PF_LOCAL,SOCK_STREAM,0); adr_unix.sin_family = AF_LOCAL;反馈 收藏
使用UNIX Domain Socket的过程和网络socket十分相似,也要先调用socket()创建一个socket文件描述符,address family指定为AF_UNIX,type可以选择SOCK_DGRAM或SOCK_STREAM,protocol参数仍然指定为0即可。 UNIX Domain Socket与网络socket编程最明显的不同在于地址格式不同,用结构体sockaddr_un表示,网络编程的socket地址是IP地址...
*/intmain(void){intlistenfd;if((listenfd=socket(PF_UNIX,SOCK_STREAM,0))<0)ERR_EXIT("socket error");unlink("/tmp/test socket");//地址复用structsockaddr_unservaddr;memset(&servaddr,0,sizeof(servaddr));servaddr.sun_family=AF_UNIX;strcpy(servaddr.sun_path,"/tmp/test socket");if(bind...
s = socket(PF_INET, SOCK_STREAM, 0); bind(s, (struct sockaddr*)myaddr, sizeof(myaddr)); 下面会看到,对于简单的socket应用编程,所需要做的就是记住流程。 使用客户端-服务器端(client-server)模型作为一个例子。server一般打开端口,被动侦听,不需要知道客户端的IP和端口;而client发起请求,必须知道服务...
struct sock *sk; // 指向套接字对应的 Sock 结构体; const struct proto_ops *ops; // 套接字对应的操作函数集,如 inet_stream_ops、inet_dgram_ops 等; struct socket_wq wq; // 套接字等待队列; }; typedef enum { SS_FREE=0; // 未分配 ...
* 传递,则不能用socketpair函数,要用socket()函数 */if(socketpair(PF_UNIX,SOCK_STREAM,0,sockfds)<0)ERR_EXIT("socketpair");pid_t pid;pid=fork();if(pid==-1)ERR_EXIT("fork");/* 如果是父进程打开的文件描述符,子进程可以共享 * 这里演示的是子进程打开的文件描述符通过封装的函数传给父进程 ...
void send_fd(int sock_fd, int send_fd) { struct msghdr msg; struct iovec vec; struct cmsghdr *p_cmsg; char sendchar = 0; vec.iov_base = &sendchar; vec.iov_len = sizeof(sendchar); msg.msg_name = NULL; msg.msg_namelen = 0; ...
fd = socket(af_inet, sock_stream, 0); if(fd < 0) { fprintf(stderr,"socket: %s\n", strerror(errno)); return-1; } seraddr.sin_family = af_inet; seraddr.sin_port = port; if(inet_pton(af_inet,"127.0.0.1", &seraddr.sin_addr) < 0) {//环回地址 ...
intfd = socket(AF_UNIX, SOCK_STREAM,0); // 绑定监听 char*socket_path ="./server.sock"; strcpy(serun.sun_path, socket_path); bind(fd, serun, ...); listen(fd,128); while(1){ //接收新连接 conn = accept(fd, ...);