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;
}
UNIX域套接字——UNIX domain socket(DGRAM)的更多相关文章
- UNIX 域套接字——UNIX domain socket
/*********************程序相关信息********************* * 程序编号:015 * 程序编写起始日期:2013.11.30 * 程序编写完成日期:2013.1 ...
- Unix域套接字(Unix Domain Socket)介绍【转】
本文转载自:http://blog.csdn.net/roland_sun/article/details/50266565 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Linux系统中, ...
- 《网络编程》Unix 域套接字
概述 Unix 域套接字是一种client和server在单主机上的 IPC 方法.Unix 域套接字不运行协议处理,不须要加入或删除网络报头,无需验证和,不产生顺序号,无需发送确认报文,比因特网域套 ...
- Unix域套接字简介
在Linux系统中,有很多进程间通信方式,套接字(Socket)就是其中的一种.但传统的套接字的用法都是基于TCP/IP协议栈的,需要指定IP地址.如果不同主机上的两个进程进行通信,当然这样做没什么问 ...
- UNIX域套接字(unix domain)
UNIX域套接字用于在同一台机器上运行的进程之间的通信. UNIX域套接字提供流和数据报两种接口. 说明:UNIX域套接字比因特网套接字效率更高.它仅赋值数据:不进行协议处理,如添加或删除网络报头.计 ...
- 高级进程间通信之UNIX域套接字
UNIX域套接字用于在同一台机器上运行的进程之间的通信.虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高.UNIX域套接字仅仅复制数据:它们并不执行协议处理,不需要添加或删除网络报头,无 ...
- UNIX网络编程——UNIX域套接字编程和socketpair 函数
一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...
- UNIX域套接字编程和socketpair 函数
一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...
- unix进程间通信方式(下)-unix域套接字(转)
在之前的博客中已经总结了其它7种进程间的通信方式.unix域套接字用于在同一台计算机上的进程间通信,虽然因特网域套接字可用于同一目的,但是unix域套接字的效率更高.unix域套接字并不进行协议处理, ...
随机推荐
- maven设计思想
20171108 maven设计思想? archetype 插件 学习插件.
- 2018年全国多校算法寒假训练营练习比赛(第一场)J - 闯关的lulu
链接:https://www.nowcoder.com/acm/contest/67/J来源:牛客网 题目描述 勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每到一层楼,他都会获 ...
- 深入理解SQL的四种连接,左外连接,右外连接,内连接,全连接
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
- Java 中线程安全问题
不好意思,一个国庆假期给我放的都不知道东西南北了,放松,很放松,差一点就弃更了,感谢那些催更的小伙伴们! 虽然没有更新,但是日常的学习还是有的,以后我尽量给大家分享一些通用知识,非技术. 但是本期还是 ...
- [leetcode greedy]55. Jump Game
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 你了解border-radius吗?
1.圆角正方形 .rounded-square{ width: 200px; height: 200px; background-color: pink; border-radius: 50px; } ...
- wikioi 1294 全排列 dfs
1294 全排列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个n, 请输出n的所有全排列 输入描述 Inpu ...
- 离线下载Xcode的文档
https://developer.apple.com/library/downloads/docset-index.dvtdownloadableindex 找到里面的文档下载地址 例如iOS 8. ...
- IO流-递归遍历目录下指定后缀名结尾的文件名称
/* *自定义遍历目录下指定后缀名结尾文件的名称的方法: * * param file:指定目录 name:指定后缀名 */ 1 public static void FileName(File fi ...
- 安装wp8sdk 当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内。
安装wp8sdk 当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内. [1404:0090][2015-06-12T08:00:53]: Error 0x800b0101: Failed ...