libubox组件(1)——usock
一:相关API介绍
1.相关源码文件:usocket.h usocket.c
2.类型标志
1: #define USOCK_TCP 0
2: #define USOCK_UDP 1
3: #define USOCK_SERVER 0x0100
4: #define USOCK_NOCLOEXEC 0x0200
5: #define USOCK_NONBLOCK 0x0400
6: #define USOCK_NUMERIC 0x0800
7: #define USOCK_IPV6ONLY 0x2000
8: #define USOCK_IPV4ONLY 0x4000
9: #define USOCK_UNIX 0x8000
3.接口函数
/**
* 创建一个新的网络sock
*
* @param type - 类型标志
* @param host - 作为server表示绑定本地地址;作为client表示需连接的地址
* @param service - 端口
* @return - sock fd > 0; 错误 < 0
*/
int usock(int type, const char *host, const char *service);
二:实例
server代码
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <string.h>
4: #include <sys/types.h> /* See NOTES */
5: #include <sys/socket.h>
6: #include <netinet/in.h>
7: #include <arpa/inet.h>
8: #include <libubox/usock.h>
9:
10: int main()
11: {
12: struct sockaddr_in cli_addr;
13: socklen_t len = sizeof(struct sockaddr);
14: int type = USOCK_TCP | USOCK_SERVER | USOCK_NOCLOEXEC | USOCK_IPV4ONLY;
15: const char *host = "CarRadio";
16: const char *service = "8000";
17: char recv_buf[1024] = {0};
18: int connect_fd, u_fd = usock(type, host, service);
19: if (u_fd < 0) {
20: perror("usock");
21: return -1;
22: }
23: while (1) {
24: connect_fd = accept(u_fd, (struct sockaddr *)(&cli_addr), &len);
25: if (connect_fd < 0) {
26: perror("accept");
27: return -1;
28: }
29: printf("client_addr: %s\n", inet_ntoa(cli_addr.sin_addr));
30: recv(connect_fd, recv_buf, 1024, 0);
31: printf("recv %s\n", recv_buf);
32: close(connect_fd);
33: }
34:
35: return 0;
36: }
37:
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <string.h>
4: #include <sys/types.h> /* See NOTES */
5: #include <sys/socket.h>
6: #include <libubox/usock.h>
7:
8: int main()
9: {
10: struct sockaddr cli_addr;
11: socklen_t len = sizeof(struct sockaddr);
12: int type = USOCK_TCP | USOCK_NOCLOEXEC | USOCK_IPV4ONLY;
13: const char *host = "CarRadio";
14: const char *service = "8000";
15: char recv_buf[1024] = {0};
16: int c_fd = usock(type, host, service); /* create a linker socket*/
17: if (c_fd < 0) {
18: perror("usock");
19: return -1;
20: }
21: send(c_fd, "helloworld", 10, 0);
22: sleep(10);
23: close(c_fd);
24: return 0;
25: }
1: include $(TOPDIR)/rules.mk
2:
3: PKG_NAME:=usocket
4: PKG_RELEASE:=1.0.0
5:
6: PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
7:
8: include $(INCLUDE_DIR)/package.mk
9:
10: define Package/$(PKG_NAME)
11: CATEGORY:=Utilities
12: SUBMENU:=Demo
13: DEPENDS:=+libubox
14: TITLE:= usocket test project.
15: endef
16:
17: define Package/$(PKG_NAME)/description
18: If you can't figure out what this program does, you're probably
19: brain-dead and need immediate medical attention.
20: endef
21:
22:
23: define Build/Prepare
24: mkdir -p $(PKG_BUILD_DIR)
25: $(CP) ./src/* $(PKG_BUILD_DIR)/
26: endef
27:
28: define Package/$(PKG_NAME)/install
29: $(INSTALL_DIR) $(1)/bin
30: $(INSTALL_BIN) $(PKG_BUILD_DIR)/userver $(1)/bin/
31: $(INSTALL_BIN) $(PKG_BUILD_DIR)/uclient $(1)/bin/
32: endef
33:
34: $(eval $(call BuildPackage,$(PKG_NAME)))
35:
36:
libubox组件(1)——usock的更多相关文章
- libubox组件(3)——uloop
一:uloop概述 uloop有三个功能: 文件描述符触发事件的监控, timeout定时器处理, 当前进程的子进程的维护 二: uloop的整体框架 1: /** 2: * 初始化事件循环 3: ...
- openWrt libubox组件之uloop原理分析
1. libubox概述 libubox是openwrt新版本中的一个基础库,有很多应用是基于libubox开发的,如uhttpd,netifd,ubusd等. libubox主要提供以下两种功 ...
- libubox组件(2)——blob/blobmsg (转载 https://segmentfault.com/a/1190000002391970)
一:blob相关接口 1.数据结构 1: struct blob_attr { 2: uint32_t id_len; /** 高1位为extend标志,高7位存储id, 3: * 低24位存储dat ...
- libubox
lbubox是openwrt的一个核心库,封装了一系列基础实用功能,主要提供事件循环,二进制格式处理,linux链表实现和一些JSON辅助处理. 它的目的是以动态链接库方式来提供可重用的通用功能,给其 ...
- libubox-uloop
参考:libubox组件(3)——uloop uloop是提供事件驱动机制接口,类似libevent事件框架,基于epoll接口来实现的. uloop三大功能:事件管理(uloop_fd).超时管理( ...
- ExtJS 4.2 评分组件
上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
- react-router 组件式配置与对象式配置小区别
1. react-router 对象式配置 和 组件式配置 组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...
- Angular2入门系列教程3-多个组件,主从关系
上一篇 Angular2项目初体验-编写自己的第一个组件 好了,前面简单介绍了Angular2的基本开发,并且写了一个非常简单的组件,这篇文章我们将要学会编写多个组件并且有主从关系 现在,假设我们要做 ...
随机推荐
- [Bug]转:使用jquery的 uploadify,在谷歌浏览器上总会崩溃的解决方法
最近做的项目使用了jquery的uploadify,但是在谷歌浏览器测试总是会出现崩溃.如: 因为是java项目. 解决的办法是: 给引入的js加上一个参数,时间戳就可以,防止缓存,使每一次都请求.( ...
- [转] 利用Matlab提取图片中曲线数据
原文地址 网易博客 前一段时间看到一篇文章"利用Matlab提取图图片中的数据",觉得思路挺好,遂下载下来研究了一番,发现作者所编写的程序没有考虑原始图片非水 平放置的情况,而实际 ...
- 【Git】GitHub for Windows使用(3) GitHub Flow的使用
第三章了,关于GitHub上有一个Pull Request,是展示本项目或资源所有的Pull 请求的. 而这个开发流程是基于GitHub Flow的开发模式. 网上关于GitHub Flow简单的介绍 ...
- iOS 中json解析数据出现中文乱码的问题
一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢 ...
- Task-based Asynchronous Operation in WCF z
Download source - 93.5 KB Introduction Though performance blocking and sluggishness are the tailback ...
- html里嵌入CSS的三种方式
在HTML中定义CSS的方式有:Embedding(嵌入式).Linking(引用式).Inline(内联式),下面通过实例为大家详细介绍下它们的特点 在HTML中常用以下3种方式定义CSS:Em ...
- Go 测试单个方法/性能测试
Go 测试单个方法 gotest.go package mytest import ( "errors" ) func Division(a, b float64) (float6 ...
- IIS5/6/7 ASP.net 请求处理过程
tks:http://www.cnblogs.com/TomXu/p/3756774.html 主要内容 本文讲解的是:服务器接受Http Request请求之后,是如何进入.Net CLR,从而进一 ...
- 《linux 内核全然剖析》 chapter 4 80x86 保护模式极其编程
80x86 保护模式极其编程 首先我不得不说.看这章真的非常纠结...看了半天.不知道这个东西能干嘛.我感觉唯一有点用的就是对于内存映射的理解...我假设不在底层给80x86写汇编的话.我 ...
- phpmyadmin后台4种拿shell方法 && php爆路径大法
php后台拿shell要知道php的路径,文章下面将讲诉爆php路径的方法!!! 方法一: CREATE TABLE `mysql`.`xss` (`xss1` TEXT NOT NULL ); IN ...