zoukankan      html  css  js  c++  java
  • UNIX域套接字——UNIX domain socket(DGRAM)

    #define UNIX_PATH_MAX    108
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    
    #include <stdio.h>
    
    #define BUFSIZE 32
    
    int main(void)
    {
    	int sd;
    	char buf[BUFSIZE];
    	struct sockaddr_un hisend;
    	int ret;
    
    	sd = socket(PF_LOCAL, SOCK_DGRAM, 0);
    	if (sd == -1) {
    		perror("socket()");
    		goto socket_err;
    	}
    
    	hisend.sun_family = AF_UNIX;
    	snprintf(hisend.sun_path, UNIX_PATH_MAX, "rcv_sock");
    
    	ret = connect(sd, (struct  sockaddr *)&hisend, sizeof(hisend));
    	if (ret == -1) {
    		perror("connect()");
    		goto connect_err;
    	}
    
    	while (1) {
    		ret = read(0, buf, BUFSIZE);
    		/* if error */
    		if (ret == 0) {
    			break;
    		}
    
    		write(sd, buf, ret);
    		ret = read(sd, buf, BUFSIZE);
    		if (ret == -1) {
    			perror("read(sd)");
    			break;
    		}
    		write(1, buf, ret);
    	}
    
    	close(sd);
    
    	return 0;
    
    
    
    accept_err:
    connect_err:
    	close(sd);
    socket_err:
    	return 1;
    }
    #define UNIX_PATH_MAX    108
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    
    #include <stdio.h>
    
    #define BUFSIZE 32
    
    int main(void)
    {
    	int sd;
    	char buf[BUFSIZE];
    	struct sockaddr_un myend, hisend;
    	socklen_t hislen;
    	int ret;
    
    	sd = socket(PF_LOCAL, SOCK_DGRAM, 0);
    	if (sd == -1) {
    		perror("socket()");
    		goto socket_err;
    	}
    
    	myend.sun_family = AF_UNIX;
    	snprintf(myend.sun_path, UNIX_PATH_MAX, "rcv_sock");
    
    	unlink(myend.sun_path);
    	ret = bind(sd, (struct  sockaddr *)&myend, sizeof(myend));
    	if (ret == -1) {
    		perror("bind()");
    		goto bind_err;
    	}
    
    	hislen = sizeof(hisend);
    	while (1) {
    		ret = recvfrom(sd, buf, BUFSIZE, 0, (struct sockaddr *)&hisend, &hislen);
    		/* if error */
    		if (ret == 0) {
    			break;
    		}
    
    		write(1, buf, ret);
    		ret = sendto(sd, "xxxxx
    ", 6, 0, (struct sockaddr *)&hisend, hislen);
    		if (ret == -1) {
    			perror("write(sd)");
    			break;
    		}
    	}
    
    	close(sd);
    
    	return 0;
    
    
    
    bind_err:
    	close(sd);
    socket_err:
    	return 1;
    }



  • 相关阅读:
    太久了
    idea文件过大解决方法
    ibus词库导入
    Linux认证考试
    Idea Linux 下的配置 max_user_watches
    SpringBoot启动过程之web,servlet/filter等
    SpringBoot启动过程学习
    也谈一下面试
    MVCC
    Python pyside2 qt 画画面
  • 原文地址:https://www.cnblogs.com/pangblog/p/3400221.html
Copyright © 2011-2022 走看看