随笔分类 -  嵌入式学习之应用程序开发篇(下)

本阶段内容主要为《UNIX网络编程 第一卷:套接口API(第三版)》以及Linux典藏大系之《Linux网络编程》学习笔记
摘要:辅助数据(ancillary data)可通过调用sendmsg和recvmsg这两个函数,使用msghdr结构中的msg_control和msg_controllen这两个成员发送和接收。 辅助数据的另一个称谓是控制信息(control information)。 辅助数据由一个或多个辅助数据对象(ancillary data object)构成,每个对象以一个定义在头文件中的cmsgh... 阅读全文
posted @ 2014-03-18 13:40 ITtecman 阅读(3512) 评论(0) 推荐(0) 编辑
摘要:这两个函数是最通用的I/O函数。实际上我们可以把所有read、readv、recv和recvfrom调用替换成recvmsg调用。类似地,各种输出函数调用也可以替换成sendmsg调用。 #include ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);ssize_t sendmsg(int sockfd, struct... 阅读全文
posted @ 2014-03-18 11:40 ITtecman 阅读(7508) 评论(0) 推荐(0) 编辑
摘要:这两个函数类似于read和write,不过readv和writev允许单个系统调用读入到或写出自一个或多个缓冲区。这些操作分别称为分散读(scatter read)和集中写(gather write),因为来自读操作的输入数据被分散到多个应用缓冲区中,而来自应用缓冲区的输出数据则被集中提供给单个写操作。 #include ssize_t readv(int filedes, const s... 阅读全文
posted @ 2014-03-18 10:05 ITtecman 阅读(1495) 评论(0) 推荐(0) 编辑
摘要:这两个函数类似于标准的read和write函数,不过需要一个额外的参数。 #include ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);返回:读入或写出字节数——成功;-1... 阅读全文
posted @ 2014-03-18 09:35 ITtecman 阅读(453) 评论(0) 推荐(0) 编辑
摘要:概述 应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket)。http://www.cnblogs.com/nufangrensheng/p/3583435.html。 原始套接口是一种对原始网络报文进行处理的套接口。原始套接口主要应用在底层网络编程上,同时也是网络黑客的必备手段。例如sniffer、拒绝服务(DoS)、IP地址欺骗等都需要在原始套接字的基... 阅读全文
posted @ 2014-03-12 16:07 ITtecman 阅读(574) 评论(0) 推荐(0) 编辑
摘要:概述 UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所用的API(套接口API)相同。UNIX域协议可视为进程间通信(IPC)方法之一。 UNIX域提供两类套接口:字节流套接口(类似TCP)和数据报套接口(类似UDP)。 使用UNIX域套接口的理由有3个: 在源自Berkeley的实现中,UNIX域套接口往... 阅读全文
posted @ 2014-03-12 09:26 ITtecman 阅读(1537) 评论(0) 推荐(0) 编辑
摘要:概述 在名字和数值地址间进行转换的函数: gethostbyname和gethostbyaddr:在主机名字与IPv4地址之间进行转换。仅仅支持IPv4. getservbyname和getservbyport:在服务名字和端口号之间进行转换。 getaddrinfo和getnameinfo:用于主机名字和IP地址之间以及服务名字和端口号之间的转换。(这两个函数是协议无关的) 域名系统 ... 阅读全文
posted @ 2014-03-11 21:27 ITtecman 阅读(1047) 评论(0) 推荐(0) 编辑
摘要:概述SCTP是一个较新的传输协议,于2000年在IETF得到标准化(TCP是在1981年标准化的)。它最初是为满足不断增长的IP电话市场设计的;具体地说,就是穿越因特网传输电话信令。SCTP是一个可靠的面向消息的协议,在端点之间提供多个流,并为多宿提供传输级支持。尽管SCTP和TCP之间存在一些本质性的差别,然而SCTP的一到一(one-to-one)接口与TCP提供的应用接口非常接近。这一点允许轻而易举地移植应用程序,不过没法使用SCTP的某些高级特性。SCTP的一到多(one-to-many)接口提供了这些特性的完全支持,然而可能需要费时费力地重新编写已有的应用程序。对于使用SCTP开发的 阅读全文
posted @ 2014-03-10 22:16 ITtecman 阅读(1385) 评论(0) 推荐(0) 编辑
摘要:概述 使用UDP编写的一些流行的应用程序有:DNS(域名系统)、NFS(网络文件系统)和SNMP(简单网络管理协议)。 如下图所示,给出了典型的UDP客户/服务器程序的函数调用: 客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须作为参数指定目的地(即服务器)的地址。类似地,服务器不接受来自客户的连接,而是只管调用recvfrom函数,等待来自某个客户的数据... 阅读全文
posted @ 2014-03-10 16:55 ITtecman 阅读(1204) 评论(0) 推荐(0) 编辑
摘要:tcpdump程序 tcpdump一边从网络读入分组一边显示关于这些分组的大量信息。它还能够只显示与所指定的准则匹配的那些分组。 netstat程序 netstat服务于多个目的: (1)展示网络端点的状态。 (2)展示某个主机上各个接口所属的多播组。 (3)使用-s选项显示各个协议的统计信息。 (4)使用-r选项显示路由表或使用-i选项显示接口信息。 lsof程序 名字lsof... 阅读全文
posted @ 2014-03-10 16:09 ITtecman 阅读(701) 评论(0) 推荐(0) 编辑
摘要:概述有很多方法来获取和设置影响套接口的选项:getsockopt和setsockopt函数fcntl函数ioctl函数getsockopt和setsockopt函数这两个函数仅用于套接口。#include int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t *optlen);返回值:0——成功,-1——出错其中,sock 阅读全文
posted @ 2014-03-10 09:50 ITtecman 阅读(617) 评论(0) 推荐(0) 编辑
摘要:将http://www.cnblogs.com/nufangrensheng/p/3590002.html中的select改用poll。 intmain(int argc, char **argv){ int i, maxi, listenfd, connfd, sockfd; int nr... 阅读全文
posted @ 2014-03-09 16:47 ITtecman 阅读(328) 评论(0) 推荐(0) 编辑
摘要:poll函数提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 poll函数原型 #include int poll(struct pollfd *fdarray, unsigned long nfds, int timeout);返回:就绪描述字的个数,0——超时,-1——出错poll函数参数介绍第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个p... 阅读全文
posted @ 2014-03-09 16:12 ITtecman 阅读(779) 评论(0) 推荐(0) 编辑
摘要:函数原型 pselect函数是由POSIX发明的,其原型如下: #include #include #include int pselect (int maxfdpl, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timespec *timeout, const sigset_t *s... 阅读全文
posted @ 2014-03-09 15:25 ITtecman 阅读(552) 评论(0) 推荐(0) 编辑
摘要:拒绝服务型攻击的概念 当一个服务器在处理多个客户时,它绝不能阻塞于只与单个客户相关的某个函数调用。否则可能导致服务器被挂起,拒绝为所有其他客户提供服务。这就是所谓的拒绝服务(denial-of-service)型攻击。它就是针对服务器做些动作,导致服务器不再能为其他合法客户提供服务。 拒绝服务型攻击的解决办法 (1)使用非阻塞I/O。 (2)让每个客户由单独的控制线程提供服务(例如创建一个... 阅读全文
posted @ 2014-03-09 14:51 ITtecman 阅读(317) 评论(0) 推荐(0) 编辑
摘要:改写http://www.cnblogs.com/nufangrensheng/p/3587962.html中的TCP回射服务器程序,把它重写成使用select来处理任意数目个客户的单进程程序,而不是为每个客户派生一个子进程。 int main(int argc, char **argv){ int i, maxi, maxfd, listenfd... 阅读全文
posted @ 2014-03-09 14:38 ITtecman 阅读(476) 评论(0) 推荐(0) 编辑
摘要:终止网络连接的通常方法是调用close函数。不过close有两个限制,却可以使用shutdown来避免。 close 把描述字的引用计数减1,仅在该计数变为0时才关闭套接口。使用shutdown可以不管引用计数就激发TCP的正常连接终止序列(由FIN开始的四个分节). close 终止数据传送的两个方向:读和写。既然TCP连接是全双工的,有时候我们需要告知对端我们已经完成了数据发送,即使对端仍... 阅读全文
posted @ 2014-03-09 13:01 ITtecman 阅读(372) 评论(0) 推荐(0) 编辑
摘要:我们可以使用select函数重写http://www.cnblogs.com/nufangrensheng/p/3587962.html中的str_cli函数,这样服务器进程一终止,客户就能马上得到通知。早先那个版本的问题在于:当套接口上发生某些事件时,客户可能阻塞于fgets调用。新版本改为阻塞于select调用,等待要么标准输入可读,要么套接口可读。下图展示了调用select所处理的各种条件。... 阅读全文
posted @ 2014-03-09 12:29 ITtecman 阅读(1160) 评论(0) 推荐(0) 编辑
摘要:select函数概况: select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或多个事件发生或经历一段指定的时间后才唤醒它。 作为一个例子,我们可以调用select,告知内核仅在下列情况发生时才返回: (1)集合{1,4,5}中的任何描述字准备好读,或 (2)集合{2,7}中的任何描述字准备好写,或 (3)集合{1,4}中的任何描述字有异常条件待处理,或 (4)已经... 阅读全文
posted @ 2014-03-09 10:52 ITtecman 阅读(1234) 评论(0) 推荐(0) 编辑
摘要:I/O复用(select、poll)典型使用在下列网络应用场合:(1)当客户处理多个描述字(通常是交互式输入和网络套接口)时,必须使用I/O复用。(2)一个客户同时处理多个套接口是可能的,不过比较少见。(3)如果一个TCP服务器既要处理监听套接口,又要处理已连接的套接口,一般就要使用I/O复用。(4)如果一个服务器既要处理TCP,又要处理UDP,一般就要使用I/O复用。(5)如果一个服务器要处理多个服务或者多个协议,一般就要使用I/O复用。I/O复用并非只限于网络编程,许多正式应用也需要使用这项技术。 阅读全文
posted @ 2014-03-08 21:58 ITtecman 阅读(364) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示