UNIX网络编程(卷1)学习笔记
学习的内容不包括IPv6和SCTP等本人认为一般不会遇到的知识点。
github/gongluck
这个作者很懒,什么都没留下…
展开
-
UNPv13:#第5章#TCP客户/服务器程序示例
客户TCP收到FIN只是表示服务器进程已关闭连接的服务端,从而不再往其中发送任何数据而已。FIN的接收并没有告知客户TCP服务器进程已经终止。当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号。该信号默认行为是终止进程。不论该进程捕获该信号并从其信号处理函数返回,还是简单的忽略该信号,写操作都将返回EPIPE。原创 2017-12-19 17:16:33 · 449 阅读 · 0 评论 -
UNPv13:#第4章#基于TCP套接字编程
客户端和服务器都从socket开始,它返回一个套接字描述符。客户随后调用connect,服务器则调用bind、listen和accept。套接字通常用close关闭,也可以用shutdown半关闭。原创 2017-12-15 16:05:15 · 432 阅读 · 0 评论 -
UNPv13:#第3章#套接字编程简介
字节流套接字上调用read或write输入或输出的字节数可能比请求的数量少,原因在于套接字的缓冲器可能已经达到了极限,需要再次调用read或write输入或输出剩余的字节。对于文本行交互的应用来说,程序应该按照操作缓冲区来编写。原创 2017-12-15 10:39:35 · 392 阅读 · 0 评论 -
UNPv13:#第2章#传输层:TCP、UDP和SCTP
UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次。UDP是一个简单、不可靠、无连接的协议,而TCP是一个复杂、可靠、面向连接的协议。TCP提供确认、序列号、RTT估算、超时、流量控制和重传等机制。TCP使用三路握手建立连接,使用四分组交换序列终止连接。当一个TCP连接被建立时,它从CLOSED状态转换到ESTABLISHED状态;当该连接被终止时,原创 2017-12-14 15:33:59 · 595 阅读 · 0 评论 -
UNPv13:#第1章#简介
概述 TCP本身并不提供记录结束标志:如果应用程序需要确定记录的边界,它就要自己去实现,已有一些常用的方法可供选择。从TCP套接字读取数据时,我们总是需要把read编写在某个循环中,当read返回0(表明对端关闭连接)或负值(表明发生错误)时终止循环。Unix errno值 errno的值只在函数发生错误时设置。如果函数不返回错误,errno的值就没有定义。errno的所有正数错误值都原创 2017-12-13 20:09:01 · 485 阅读 · 0 评论 -
UNPv13:#附录A#IPv4、IPv6、ICMPv4和ICMPv6
本附录给出IPv4、IPv6、ICMPv4及ICMPv6的概貌。这些材料所提供的额外背景知识对于理解第2章中有关TCP和UDP的讨论会有所帮助。高级套接字编程部分有若干章也使用了IP和ICMP的某些特性,例如IP选项(第27章)以及ping和traceroute程序(第28章)。原创 2017-12-12 16:41:53 · 2958 阅读 · 0 评论 -
第30章 客户/服务器程序设计范式
觉得还是按:1 --> 7 --> 9 的顺序选取服务器模型比较(简单)可取。原创 2017-11-20 15:16:40 · 478 阅读 · 0 评论 -
第26章 线程
#include //线程int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func)(void*), void *arg);int pthread_join(pthread_t *tid, void **status);pthread_t pthread_self(void);int pthr原创 2017-11-20 11:05:17 · 375 阅读 · 0 评论 -
第25章 信号驱动式I/O
(1)建立SIGIO信号的信号处理函数(2)设置套接字属主(3)开启套接字的信号驱动式I/O标志#include "../Gnet.h"int fd;void sig_io(int sig){ char buf[MAX_LINE]; int nread; struct sockaddr_in client_addr; socklen_t c原创 2017-11-17 17:29:49 · 722 阅读 · 0 评论 -
第21章 多播
1·多播(组播)地址:224.0.0.0~139.255.255.2552·发送多播数据报无需任何特殊处理,发送应用程序不必为此加入多播组3·多播相对于广播的优势在于不会对多播分组不感兴趣的主机增加额外负担#include "../Gnet.h"int main(int argc, const char* argv[]){ int sendfd, recvfd;原创 2017-11-17 09:30:29 · 412 阅读 · 0 评论 -
第20章 广播
1·广播和多播要求用于UDP或原始IP,它们不能用于TCP。2·单播IP数据报仅由通过目的IP地址指定的单个主机接收。3·广播分组去往子网上的所以主机,包括发送主机本身。4·(一般)除非显式告诉内核我们准备发送广播数据报,否则系统不允许我们这么做。 const int on = 1; setsockopt(sockfd, SOL_SOCKET, SO_BROAD原创 2017-11-16 09:46:33 · 384 阅读 · 0 评论 -
第17章 ioctl操作
/*/usr/src/linux-headers-4.10.0-35/include/uapi/linux/if.h*//* * INET An implementation of the TCP/IP protocol suite for the LINUX * operating system. INET is implemented using the BSD Socket原创 2017-11-15 15:33:58 · 886 阅读 · 0 评论 -
第16章 非阻塞式I/O
执行时间: 停等版本(完全阻塞) 》 select加阻塞I/O版本 》 fork多进程版本(Linux下多线程也应该差不多) 》 非阻塞I/O版本非阻塞读写#include "../Gnet.h"void do_client(int connfd){ char to[MAX_LINE], fr[MAX_LINE]; c原创 2017-11-15 11:28:06 · 644 阅读 · 0 评论 -
第15章 Unix域协议
#include struct sockaddr_un{sa_family_t sun_family; /* AF_LOCAL */char sun_path[104]; /*可能是92~108*/};#include //创建两个连接起来的Unix域套接字int socketpair(int family/*AF_LOCAL*/, int typ原创 2017-11-14 14:26:15 · 276 阅读 · 0 评论 -
第14章 高级I/O函数
设置套接字时间限制:1、使用alarm函数和SIGALRM信号2、使用由select提供的时间限制3、使用SO_RCVTIMEO和SO_SNDTIMEO套接字选项#include ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, const void *buf, size_t count);原创 2017-11-13 17:39:58 · 458 阅读 · 0 评论 -
第13章 守护进程和inetd超级服务器
#include void openlog(const char* ident, int options, int facility);void syslog(int priority, const char* message, ...);void closelog(void);syslog资料原创 2017-11-13 14:22:20 · 355 阅读 · 0 评论 -
第11章 名字与地址转换
名字和数值地址间的转换:gethostbyname() gethostbyaddr()服务名字和端口号之间的转换: getservbyname() getservbyport()解析器代码读 依赖于 配置文件,文件/etc/resolv.conf一般包含本地名字服务器IP地址。DNS替代方法:静态主机文件,/etc/hosts或者网络信息系统NIS。原创 2017-11-13 10:25:49 · 361 阅读 · 0 评论 -
第8章 基本UDP套接字编程
在没有启动 UDP 服务器的情况下,客户端键入文本行之后,并不会回显该文本行。此时客户端永远阻塞于它的 recvfrom 调用,等待一个永远不会出现的服务器应答。由于服务器没有启动,因此会响应一个端口不可到达的 ICMP 错误消息(即异步错误),但是该 ICMP 错误消息并不会到达客户端进程,因此客户端进程根本不知道发生什么,一直阻塞于它的 recvfrom 调用。为了能使这个异步错误到达客户端进程,我们可以在 UDP 中调用 connect 函数,使其成为一个已连接的 UDP 套接字,但是该链接不会像 T原创 2017-11-10 17:45:30 · 515 阅读 · 0 评论 -
第7章 套接字选项
在Linux网络编程中,有时需要设置地址复用,允许发送广播包,将主机加入某个多播组,设置发送与接收缓冲区的大小,设置发送与接收的超时时间,将套接字绑定到某个接口上,发送TCP探测包查看客户端是否保持连接等,这些都需要对套接字选项进行设置.而对套接字选项进行操作的主要有以下两个函数,setsockopt与getsockopt. 这两个函数不仅能够操作套接字层,而且能够操作IP层与TCP层.原创 2017-11-10 10:54:54 · 463 阅读 · 0 评论 -
第6章 I/O复用:select和poll函数
I/O复用典型使用在下列网络应用场合:1)当客户处理多个描述符(通常是交互式输入和网络套接字)时,必须使用I/O复用2)一个客户同时处理多个套接字是可能的,不过比较少见。在16.5节结合一个web客户的上下文给出这种场合使用select的例子3)如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用4)如果一个服务器既要处理TCP,又要处理UDP,一般就要使用I/O复用。8.15节有这么一个例子5)如果一个服务器要处理多个服务或者镀铬协议(在13.5节讲述的inetd原创 2017-11-09 17:16:26 · 361 阅读 · 0 评论