![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笨办法学unix网络编程
lz404
偶尔很认真
展开
-
UNIX网络编程(UNP) 第二十六章学习笔记
概述传统unix中,如果一个进程需要另一个实体完成某事,就会fork一个子进程然后让其执行。但是fork调用存在着以下几个问题:fork是昂贵的。fork要将父进程的内存映像复制到子进程,并在子进程复制所有描述符。即便现在使用了“写时复制”技术,fork依然是昂贵的fork返回之后,父子进程之间的通信需要进程间通信(IPC)。调用fork之前父进程向子进程传递信息是容易的,但是子进...原创 2020-02-06 18:13:09 · 239 阅读 · 0 评论 -
UNIX网络编程(UNP) 第十六章学习笔记
概述套接字默认是阻塞的,可能阻塞的套接字调用可以分为以下四类读取操作。包括read,reav,recv,recvfrom和recvmsg五个函数。如果进程对阻塞的TCP套接字调用这些函数,而接收缓冲区没有数据可读,那么进程就会沉睡直到有数据可读(无论是一个字节还是说一个完整的TCP分节的数据)。如果需要等到足够数目的数据可读,那么可以用MSG_WAITALL状态或者调用我们自己的readn...原创 2020-02-05 18:00:41 · 258 阅读 · 0 评论 -
UNIX网络编程(UNP) 第十五章学习笔记
概述Unix域不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,使用的API就是套接字API之所以使用Unix域而不是TCP,是因为在一个主机中,unix域协议往往比TCP快一倍多,unix域协议还可以用于同一个主机上不同进程之间传递描述符,而且通过提供客户的凭证(用户ID和组ID)给服务器,提供了额外的安全检查措施Unix域套接字地址结构struct sockadd...原创 2020-02-03 15:49:29 · 216 阅读 · 0 评论 -
UNIX网络编程(UNP) 第十四章学习笔记
概述本章中我们需要学习如何为I/O操作设置超时、以及如何使用read write的若干个变体、还有如何确定缓冲区中的数据量套接字超时总的来说 ,有什么方法 ?调用alarm,会在指定时间满了之后引发SIGALRM信号。这个方法缺点在于,需要涉及到信号处理,而信号处理在不同实现上有差异,而且可能干扰进程现有的alarm调用在select上阻塞等待I/O,借用select内置的时间限制,来...原创 2020-02-02 14:21:53 · 287 阅读 · 0 评论 -
UNIX网络编程(UNP) 第十一章学习笔记
综述这一章主要探讨的问题是我们如何实现主机名-ip地址,服务名-端口号之间的转换。在IPv4的版本下,我们对应的有四个函数:1. 主机名到ip地址,gethostbyname 2. ip地址反查主机名, gethostbyaddr 3.服务名到端口号, getservbyname 4.端口号反查服务名, getservbyport上述的四个函数虽然好用,但是问题在于不兼容IPv6,于是我们引...原创 2019-12-28 16:16:50 · 426 阅读 · 1 评论 -
UNIX网络编程(UNP) 第八章学习笔记
概述可以看到udp和tcp不一样的在于,udp不需要建立连接,没有connect和listen这一步,而且使用sendto和recvfrom函数来完成基本读取recvfrom和sendto函数函数定义ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr * from,s...原创 2019-12-17 08:16:34 · 176 阅读 · 0 评论 -
UNIX网络编程(UNP) 第七章学习笔记
概述我们可以通过若干个方法来修改套接字的选项,包括getsockopt和setsockopt函数,fcntl函数可以用于将套接字设置为非阻塞套接字或者信号驱动套接字以及修改套接字属主的方法int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);int ge...原创 2019-12-16 16:33:44 · 217 阅读 · 0 评论 -
UNIX网络编程(UNP) 第六章学习笔记
第六章概述在第五章中我们看到了当客户端因为调用fgets而阻塞的时候,没有正确的处理服务器崩溃的情景,显然我们需要新的机制,允许进程获取预知能力,即在IO条件就绪(输入准备好读取,输出有足够的空间)的时候内核通知进程,从而避免进程阻塞,这种能力称之为I/O多路复用I/O多路复用的使用场景:客户处理多个描述符的时候客户同时处理多个套接字TCP服务器如果需要同时处理监听套接字又要处理连接...原创 2019-11-25 05:25:31 · 220 阅读 · 0 评论 -
UNIX网络编程(UNP) 第五章学习笔记
在本章中,我们将完成一个可以回射的服务器和客户端,并且我们需要理解在每一个环节可能出现什么问题,并且加以预防代码(带注释)// server#include "../unp.h"int main(int argc, char **argv){ int listenfd,connfd; pid_t child_pid; socklen_t clilen; s...原创 2019-11-23 09:04:18 · 262 阅读 · 0 评论 -
UNIX网络编程(UNP) 第四章学习笔记
第四章我们不妨先来看下tcp客户端/服务端程序的套接字函数我们可以看到服务端的起始到结束包含了 socket()->bind()->listen()->read()<->write()->close()而客户端则是socket()->connect()->write()<->read()->close()接下来,我们顺着这...原创 2019-11-22 08:17:01 · 372 阅读 · 1 评论 -
UNIX网络编程(UNP) 第三章学习笔记
首先我们需要了解套接字地址结构到底长啥样,我们可以在<netinet/in.h>中找到下面的结构 /* * Internet address (a structure for historical reasons) */ struct in_addr { in_addr_t s_addr; // 32位的IPV4地址,一般实现方式是uint3...原创 2019-11-21 04:15:10 · 202 阅读 · 0 评论 -
Unix网络编程-Mac OS环境配置
虽然网上的材料已经足够丰富了,不过似乎还是或多或少出现问题,趁着自己记忆尤新,就先记下来了~!首先如果你想跑第一个程序,你会很遗憾的发现并不能,因为缺乏作者写的头文件"dnp.h"首先我们要下载源文件https://download.csdn.net/download/ts173383201/4505201解压之后,cd 进入,并按照下面的步骤进行./configurecd li...原创 2019-11-09 13:28:17 · 266 阅读 · 0 评论