🚙

💨 💨 💨

×

  • Categories

  • Archives

  • Tags

  • About

重读UNIX网络编程第三章到第十一章笔记整理(二)

Posted on 07-03-2017 | In NP

第七章

  • 7.5节 : 通用套接字选项, 常用的有

    • SO_KEEPALIVE
    • SO_REVBUF
    • SO_SNDBUF
    • SO_REUSEADDR
  • 7.9节 : tcp套接字选项, 常用的有

    • TCP_NODELAY
    • TCP_MAXSEG
  • 7.11节 :fcntl函数,常用的用法是使用F_SETFL命令设置O_NOBLOCK文件状态标志, 我们可以把一个套接字设置为非阻塞型。

. . .

重读UNIX网络编程第三章到第十一章笔记整理(一)

Posted on 07-02-2017 | In NP

因为第二章之后基本都是纯Socket API的内容, 第三章到第十一章的笔记整理合并到一起。

第三章

  • 3.4 :字节排序函数,涉及到大小端,处理网络字节序和主机字节序的转换

    如何判别是大端(Big-Endian)还是小端(Little-Endian):

    union TestBigOrLittle
    {
    short var_short;
    char array_char[2];
    };

    int main()
    {
    TestBigOrLittle unTestUnion;
    unTestUnion.var_short = 0x1234;
    if (sizeof(short) == 2)
    {

    if (unTestUnion.array_char[0] == 0x12)
    printf("BigEndian\n");
    else if(unTestUnion.array_char[0] == 0x34)
    printf("LittleEndian\n");
    else
    printf("unkonw endian\n");
    }
    else
    {
    printf("sizeof(short) : %d \n", sizeof(short));
    }
    return 0;
    }

    网际协议使用大端字节序来传送这些多字节整数, 也就是说网络字节序就是大端字节序.

    由图中我们可以知道, htons和ntohs是用于端口的字节序转换的, 而htonl和ntohl是用于32位IP地址的, 下图就是一个例子:

  • 3.6 : 地址转换函数,它们在ASCII字符串(这是人们偏爱使用的格式)与网络字节序的二进制值(这是存放在套接字地址结构中的值)之间转换网际地址

第四章基本TCP套接字编程

  • 这里写图片描述

  • listen函数

    int listen(int sockfd, int backlog);

    当来自客户的SYN到达时,TCP在未完成连接队列中创建个新项,然后响应以三路握手
    的第—个分节服务器的SYN响应,其中捎带对客户SYN的ACK(2.6节)。这一项.直保留在
    未完成连接队列中,直到三路握手的第二个分节(客户对服务器SYN的ACK)到达或者该项超
    时为止。(源白Berkeley的实现为这些末完成连接的项设置的超时值为75s。)如果3路握手正常
    完成,该项就从未完成连接队列移到已完成连接队列的队尾。当进程调用accept时(该函数在
    下一节讲解),己完成连接队列巾的队头项将返回给给进程,或者如果该队列为空,那么进程将被
    投入睡眠,直到TCP在该队列中放入一项才唤醒它。

  • 4.6节: accept函数
    accept函数用于从已完成连接队列对头返回下一个已完成连接
    int accept(int sockfd, struct sockaddr *cliaddr, socklent_t *addrlen);

  • 4.7节: fork函数
    fork函数的内存语义:

    1. 共享代码段, 子指向父 : 父子进程共享同一代码段, 子进程的页表项指向父进程相同的物理内存页(即数据段/堆段/栈段的各页)
    2. 写时复制(copy-on-write) : 内核会捕获所有父进程或子进程针对这些页面(即数据段/堆段/栈段的各页)的修改企图, 并为将要修改的页面创建拷贝, 将新的页面拷贝分配给遭内核捕获的进程, 从此父/子进程可以分别修改各自的页拷贝, 不再相互影响.
  • 4.9节:
    close函数, 涉及到描述符引用计数,所以多进程并发服务器才可以共享已连接套接字,因为父进程调用close函数知识把该套接字标记成已关闭并导致该套接字描述符减1。只要引用计数的值仍大于0,就不会引发tcp的四分组连接终止序列

第五章

  • 5.9节:
    处理SIGCHLD信号, 涉及到僵死进程(子进程终止时给父进程发送了一个SIGCHLD信号,若父进程未加处理,则子进程进入僵死状态),所以要建立该信号处理函数,并在函数中调用waitpid来处理
  • 5.10节 :
    使用wait或者waitpid来处理已终止的子进程,通常是使用waitpid并指定WNOHANG选项,来告知waitpid在有尚未终止的子进程在运行时不要阻塞。

. . .

重读UNIX网络编程第二章笔记修正(结合TLPI和APUE两书的笔记整理)

Posted on 06-05-2017 | In NP

为加深理解, 故本章老笔记内容大幅删减重写.
第二章重点如下 :

TCP (Transmission Control Protocol)传输控制协议.

特性如下 :

  • TCP头为20字节
  • 面向连接
  • 全双工
  • 可靠, 关心确认/超时/重传等, 保证顺序
  • 流量控制
  • 字节流, 没有任何记录边界

UDP (User Datagram Protocol)用户数据报协议.

特性如下 :

  • UDP头为8字节
  • 无连接
  • 不可靠, 不保证顺序/是否到达/是否重复
  • 每个数据报都有一个长度

TCP三路握手(three-way handshake)

TCP三路握手图

TCP选项 :

  • MSS选项 发送SYN的TCP一端使用本选项通告对端他的最大分节大小(maximum segment size)
  • 窗口规模选项
  • 时间戳选项, 对于高速网络连接是必要的.

. . .

重读UNIX网络编程第一章笔记修正

Posted on 06-02-2017 | In NP

又准备从头看一遍unp, 把一些老笔记放到博客里来就当网盘吧, 顺便修正以及删减一些之前不够精炼的老笔记内容.

第一章重点如下 :

  • OSI (open systems interconnection), 即计算机通信开放系统互联模型
  • OSI分为七层, 从上到下依次为
    • 应用层
    • 表现层
    • 会话层
    • 传输层
    • 网络层
    • 数据链路层
    • 物理层
  • 对于网际网协议族, OSI顶上三层合并为一层, 称为应用层. 传输层对应着tcp/udp等, 网络层对应着IPv4/IPv6, OSI的数据链路层和物理层是随系统提供的设备驱动程序和网络硬件

. . .

C++11各种左右引用

Posted on 05-19-2017 | In Misc

本文由 简悦 SimpRead 转码, 原文地址 www.zhihu.com iker 同学

. . .

UE4中如何解决Failed To Launch Editor

Posted on 05-02-2017 | In UE4

当你点击 .uproject 文件却打不开项目, 弹出一个窗口写着 “Failed TO Launch Editor”的时候,
大概率是因为你对 UE4Editor.exe 设置为了以管理员身份打开,
所以解决方法就是 :

只要对 UE4Editor.exe 右键-属性-兼容性, 去掉”以管理员身份运行此程序”的勾

以及去掉”更改所有用户的设置”中的以管理员身份运行此程序的√

UE4打印大全

Posted on 05-02-2017 | In UE4

介绍

都是自描述性的且项目无关的, 可以直接放心使用.

. . .

UE4中如何不继承UObject就能spawn一个actor

Posted on 04-22-2017 | In UE4

介绍

其实不用继承 UObject 也可以生成一个 actor,

关键的点就是拿到 UWorld ,
所以只要从一个拥有 UWorld 的虚幻相关实例中传递它的 UWorld 给一个原生 C++ 类也可以.

示例代码

. . .

1…91011121314151617181920212223242526272829…37
Mike

Mike

🚙 🚗 💨 💨 If you want to create a blog like this, just follow my open-source project, "hexo-theme-neo", click the GitHub button below and check it out ^_^ . It is recommended to use Chrome, Safari, or Edge to read this blog since this blog was developed on Edge (Chromium kernel version) and tested on Safari.

11 categories
289 posts
111 tags
about
GitHub Spotify
© 2013 - 2025 Mike