socket函数

Socket与系统调用深度分析

試著忘記壹切 提交于 2020-02-13 03:02:32
一、什么是系统调用   linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态。   系统调用的意义如下:   1.把用户从底层的硬件编程中解放出来   2.极大的提高了系统的安全性   3.使用户程序具有可移植性   一般进程是不能访问内核的,而系统调用是用户态进入内核态的唯一入口 二、系统调用与API之间的关系   1.API和系统调用的区别:     API只是一个函数定义     系统调用通过软中断向内核发出一个明确的请求   2.Libc库定义的一些API引起了封装例程(wrapper routine,唯一的目的就是发布系统调用)     一般每个系统调用对应一个封装例程     库再用这些封装例程定义出给用户的API   3.不是每个API都对应一个特定的系统调用     首先,API可能直接提供用户态的服务(比如一些数学函数)     其次,一个单独的API可能调用几个系统调用不同的     API可能调用了同一个系统调用   4.返回值     大部分封装例程返回一个整数,其值得含义依赖于相应的系统调用     -1在多数情况下表示内核不能满足进程的请求     Libc中定义的errno变量包含特定的出错码 三

网络并发面试集锦(1-50)

老子叫甜甜 提交于 2020-02-08 18:50:03
目录 1、python的底层网络交互模块有哪些? 2、简述OSI七层协议 3、什么是C/S和B/S架构? 4、简述TCP协议? 5、什么是arp协议? 6、tcp和UDP的区别?为什么tcp协议更可靠? 7、什么是局域网和广域网? 8、什么是socket?简述基于tcp协议的套接字通信流程? 9、什么是粘包?socket中造成粘包的原因是什么?那些情况会发送粘包现象? 10、IO多路复用的作用? 11、什么是防火墙以及作用? 12、select、poll、epoll模型的区别? 13、简述进程、线程、协程的区别以及应用场景? 14、什么是GIL全局解释器锁? 15、Python中如何使用线程池和进程池? 16、threading.local的作用? 17、进程之间二u和进行通讯? 18、什么是并发和并行? 19、同步和异步,阻塞和非阻塞的区别? 20、路由器和交换机的区别? 21、什么是域名解析? 22、如何让修改本地的hosts文件? 23、生产者和消费者模型应用场景? 24、什么是cdn服务? 25、有A.txt和B.txt两个文件,使用多进程和进程池的方式分别读取这两个文件? 26、那些是常见的TCPFlags? 27、tracerroute--一般使用的是哪种网络层协议? 28、iptabkes只是考察,根据要求写出防火墙规则? 29、socket套接字编程? 30

python--网络编程 01 socket常见方法总结

淺唱寂寞╮ 提交于 2020-02-08 13:48:34
服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来 客户端套接字函数 s.connect() 主动初始化TCP服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常 公共用途的套接字函数 s.recv() 接收TCP数据 s.send() 发送TCP数据 s.sendall() 发送TCP数据 s.recvfrom() 接收UDP数据 s.sendto() 发送UDP数据 s.getpeername() 连接到当前套接字的远端的地址 s.getsockname() 当前套接字的地址 s.getsockopt() 返回指定套接字的参数 s.setsockopt() 设置指定套接字的参数 s.close() 关闭套接字 面向锁的套接字方法 s.setblocking() 设置套接字的阻塞与非阻塞模式 s.settimeout() 设置阻塞套接字操作的超时时间 s.gettimeout() 得到阻塞套接字操作的超时时间 面向文件的套接字的函数 s.fileno() 套接字的文件描述符 s.makefile() 创建一个与该套接字相关的文件 send和sendall区别 来源: CSDN 作者: 一越王超 链接:

Cpython支持的进程与线程

你离开我真会死。 提交于 2020-02-08 02:53:39
Cpython支持的进程与线程 一、multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程。python中提供了非常好的多进程包 multiprocessing。 multiprocessing 模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似。 multiprocessing 的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。 二、Process类的介绍 1.创建进程的类 Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动) 强调: 1. 需要使用关键字的方式来指定参数 2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号 2.参数介绍 1 group参数未使用,值始终为None 2 3 target表示调用对象,即子进程要执行的任务 4 5 args表示调用对象的位置参数元组,args=(1,2,'egon',) 6 7 kwargs表示调用对象的字典,kwargs={'name':'egon','age':18} 8 9 name为子进程的名称 3

网络编程并发编程面试题

泄露秘密 提交于 2020-02-07 23:47:48
网络编程,并发编程 面试题1. 简述 OSI 七层协议。应用层与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。表示层这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。会话层它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。传输层这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。网络层这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址

OpenResty学习指南(一)

做~自己de王妃 提交于 2020-02-06 00:09:19
我的博客: https://www.luozhiyun.com/archives/217 想要学好 OpenResty,你必须理解下面 8 个重点: 同步非阻塞的编程模式; 不同阶段的作用; LuaJIT 和 Lua 的不同之处; OpenResty API 和周边库; 协程和 cosocket; 单元测试框架和性能测试工具; 火焰图和周边工具链; 性能优化。 你不应该使用任何 Lua 世界的库来解决上述问题,而是应该使用 cosocket 的 lua-resty-* 库。Lua 世界的库很可能会带来阻塞,让原本高性能的服务,直接下降几个数量级。 OpenResty阶段 和nginx一样,都有阶段的概念,并且每个阶段都有自己不同的作用: set_by_lua,用于设置变量; rewrite_by_lua,用于转发、重定向等; access_by_lua,用于准入、权限等; content_by_lua,用于生成返回内容; header_filter_by_lua,用于应答头过滤处理; body_filter_by_lua,用于应答体过滤处理; log_by_lua,用于日志记录。 OpenResty 的 API 是有阶段使用限制的。每一个 API 都有一个与之对应的使用阶段列表,如果你超范围使用就会报错。 具体的API可以查阅文档: https://github.com

Linux深入理解Socket异常

本秂侑毒 提交于 2020-02-04 23:49:44
在各种网络异常情况的背后,TCP是怎么处理的?又是怎样把处理结果反馈给上层应用的?本文就来讨论这个问题。分为两个场景来讨论 建立连接时的异常情况 1 正常情况下   经过三次握手,客户端连接成功,服务端有一个新连接到来。 2 客户端连接了服务端未监听的端口   在这种情况下,服务端会对收到的SYN回应一个RST(RFC 793 3.4),客户端收到RST之后,终止连接,并进入CLOSED状态。 客户端的connect返回ECONNREFUSED 111 /* Connection refused */。 3 客户端与服务器之间的网络不通,这又分两种情况   connect返回主机不可达。具体信息在不同系统上不一样,比如linux上的定义是EHOSTUNREACH 113 /* No route to host */。明显给出了一个不可访问的地址(例如,访问一个不存在的本地网络地址,或者DNS解析失败会导致这种情况。 connect返回连接超时。这种情况下,客户端发送的SYN丢失在网络中,没有得到确认,客户端的TCP会超时重发SYN。以ubuntu 12.04为例,重发SYN的时间,系列是:0,1,3,7,15,31,63(2n-1-1)。即发送7个SYN后等待一个超时时间(例如:127秒),如果在这段时间内仍然没有收到ACK,则connect返回超时。   在这两种情况下,

linux socket编程 connect函数详解

ぃ、小莉子 提交于 2020-02-04 08:40:05
int connect ( int sockfd , const struct sockaddr * addr , socklen_t addrlen ) ; connect()函数用于客户端,该函数的功能为向服务器发起连接请求。connect()函数存在与sys/socket.h头文件中。 connect函数的参数与bind()函数中的参数形式一致; 来源: CSDN 作者: 【一剑隔世】 链接: https://blog.csdn.net/qq_42861208/article/details/104160882

理解I/O Completion Port(完成端口)

只谈情不闲聊 提交于 2020-02-04 05:51:45
理解I/O Completion Port(完成端口) 欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证你明白IOCP的一切,但我会尽我最大的努力。以下是我会在这篇文章中提到的相关技术: I/O端口 同步/异步 堵塞/非堵塞 服务端/客户端 多线程程序设计 Winsock API 2.0 在这之前,我曾经开发过一个项目,其中一块需要网络支持,当时还考虑到了代码的可移植性,只要使用select,connect,accept,listen,send还有recv,再加上几个#ifdef的封装以用来处理Winsock和BSD套接字[socket]中间的不兼容性,一个网络子系统只用了几个小时很少的代码就写出来了,至今还让我很回味。那以后很长时间也就没再碰了。 前些日子,我们策划做一个网络游戏,我主动承担下网络这一块,想想这还不是小case,心里偷着乐啊。网络游戏好啊,网络游戏为成百上千的玩家提供了乐趣和令人着秘的游戏体验,他们在线上互相战斗或是加入队伍去战胜共同的敌人。我信心满满的准备开写我的网络,于是乎,发现过去的阻塞同步模式模式根本不能拿到一个巨量多玩家[MMP]的架构中去,直接被否定掉了。于是乎,就有了IOCP,如果能过很轻易而举的搞掂IOCP,也就不会有这篇教程了

理解I/O Completion Port(完成端口)

狂风中的少年 提交于 2020-02-04 05:35:57
欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证你明白IOCP的一切,但我会尽我最大的努力。以下是我会在这篇文章中提到的相关技术:   I/O端口   同步/异步   堵塞/非堵塞   服务端/客户端   多线程程序设计   Winsock API 2.0   在这之前,我曾经开发过一个项目,其中一块需要网络支持,当时还考虑到了代码的可移植性,只要使用select,connect,accept,listen,send还有recv,再加上几个#ifdef的封装以用来处理Winsock和BSD套接字[socket]中间的不兼容性,一个网络子系统只用了几个小时很少的代码就写出来了,至今还让我很回味。那以后很长时间也就没再碰了。   前些日子,我们策划做一个网络游戏,我主动承担下网络这一块,想想这还不是小case,心里偷着乐啊。网络游戏好啊,网络游戏为成百上千的玩家提供了乐趣和令人着秘的游戏体验,他们在线上互相战斗或是加入队伍去战胜共同的敌人。我信心满满的准备开写我的网络,于是乎,发现过去的阻塞同步模式模式根本不能拿到一个巨量多玩家[MMP]的架构中去,直接被否定掉了。于是乎,就有了IOCP,如果能过很轻易而举的搞掂IOCP,也就不会有这篇教程了。下面请诸位跟随我进入正题