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\n", 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;
}



转载于:https://www.cnblogs.com/pangblog/p/3400221.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值