socket函数

wpa_supplicant与kernel的接口

我怕爱的太早我们不能终老 提交于 2020-03-01 10:22:08
1. 接口定义实现wpa_drivers wpa_drivers的定义如下: [cpp] view plain copy struct wpa_driver_ops *wpa_drivers[] = { #ifdef CONFIG_DRIVER_WEXT &wpa_driver_wext_ops, // 我的系统使用的这个老的接口 #endif #ifdef CONFIG_DRIVER_NL80211 // 现在流行的NL80211接口 &wpa_driver_nl80211_ops, #endif #ifdef CONFIG_DRIVER_HOSTAP &wpa_driver_hostap_ops, #endif #ifdef CONFIG_DRIVER_MADWIFI &wpa_driver_madwifi_ops, #endif #ifdef CONFIG_DRIVER_BROADCOM &wpa_driver_broadcom_ops, #endif #ifdef CONFIG_DRIVER_BSD &wpa_driver_bsd_ops, #endif #ifdef CONFIG_DRIVER_NDIS &wpa_driver_ndis_ops, #endif #ifdef CONFIG_DRIVER_WIRED &wpa_driver_wired_ops, #endif

[JavaEE] NIO与IO的区别

ε祈祈猫儿з 提交于 2020-03-01 09:52:31
nio是new io的简称,从jdk1.4就被引入了。现在的jdk已经到了1.6了,可以说不是什么新东西了。但其中的一些思想值得我来研究。这两天,我研究了下其中的套接字部分,有一些心得,在此分享。 首先先分析下:为什么要nio套接字? nio的主要作用就是用来解决速度差异的。举个例子:计算机处理的速度,和用户按键盘的速度。这两者的速度相差悬殊。如果按照经典的方法:一个用户设定一 个线程,专门等待用户的输入,无形中就造成了严重的资源浪费:每一个线程都需要珍贵的cpu时间片,由于速度差异造成了在这个交互线程中的cpu都用来等 待。 nio套接字是怎么做到的? 其实,其中的思想很简单:轮询。一个线程轮询多个input;传统的方式是:有n个客户端就要有n个服务线程+一个监听线程,现在采取这种凡是,可以仅仅使用1个线程来代替n个服务线程以此来解决。 具体应用例子: 在ftp的控制连接中,因为只有少量的字符命令进行传输,所以可以考虑利用这种轮询的方式实现,以节省资源。 ----------------------------------------------------- Java中的阻塞和非阻塞IO包各自的优劣思考 NIO 设计背后的基石:反应器模式,用于事件多路分离和分派的体系结构模式。 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的

socket网络编程实现并发服务器——IO多路复用

你。 提交于 2020-02-28 22:44:27
一 五种网络I/O模型 在Linux下进行网络编程时,服务器端编程经常需要构造高性能的IO模型,常见的IO模型有五种: (1)同步阻塞IO (2)同步非阻塞IO(Non-blocking IO) (3)IO多路复用(IO Multiplexing) :IO多路复用模型是建立在内核提供的多路分离函数select基础之上的,使用select函数 可以避免同步非阻塞IO模型中轮询等待的问题,此外poll、epoll都是这种模型。 (4) 信号驱动IO(signal driven IO) (5)异步IO(Asynchronous IO) 各服务器源代码:https://gitee.com/constructorvirgil/lingyun_apue/tree/master/yangjianing 二 多路复用–select select()函数允许进程指示内核等待多个事件(文件描述符)中的任何一个发生,并只在有一个或多个事件发生或经历一段指定时 间后才唤醒它,然后接下来判断究竟是哪个文件描述符发生了事件并进行相应的处理。 # include <sys/select.h> # include <sys/time.h> struct timeval { long tv_sec ; //seconds long tv_usec ; //microseconds } ; FD_ZERO ( fd

CASSINI源代码分析

北战南征 提交于 2020-02-28 08:56:28
CASSINI 源代码分析 2004-11-10 http://blog.csdn.net/shanhe/ 为什么要分析 CASSINI? Cassini (卡西尼)是 asp.net 上的一个开源项目。主要给出一个脱离 IIS 实现 asp.net 执行环境。项目演示了如何自己创建一个 web server ,并且运行一个 asp.net 应用程序。 研究 Cassini 可以了解: 1 、 .net 环境下的 web server 如何实现,注意那些问题 2 、 asp.net 的执行本质 3 、了解 appDomain 的执行概念 安装 没有什么问题,默认即可 运行 出现问题,主要是我的 .net framework 是 1.0.3705 而 系统下载的经过编译的 cassini.dll 是在 v1.1.4322 下编译,更麻烦的是经过签名的。所以启动时候回提示找不到 v1.1.4322 的 framework 而我的目标是想分析这个程序,该如何进行? 既然获得了整个源代码,我就应该从理论上熟悉并且可以掌握整个系统,我建立一个工程,将全部 .cs 文件和资源文件加入到一个项目,同时删除原有项目默认的 form1 ,因为 CassiniWebServer.cs 已经有一个 main 入口。 调试,解决问题 1、 编译 OK ,但是,无法启动,原来缺少 .ico 文件

Django _web框架本质

杀马特。学长 韩版系。学妹 提交于 2020-02-28 00:34:30
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了。 socket服务端 import socket sk = socket.socket() sk.bind(( "127.0.0.1", 80)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv( 8096) conn.send(b "OK") conn.close() 可以说Web服务本质上都是在这十几行代码基础上扩展出来的。这段代码就是它们的祖宗。 用户在浏览器中输入网址,浏览器会向服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定,那互联网还能玩么? 所以,必须有一个统一的规则,让大家发送消息、接收消息的时候都有个格式依据,不能随便写。 这个规则就是HTTP协议,以后浏览器发送请求信息也好,服务器回复响应信息也罢,都要按照这个规则来。 HTTP协议主要规定了客户端和服务器之间的通信格式,那HTTP协议是怎么规定消息格式的呢? 让我们首先打印下我们在服务端接收到的消息是什么。 import socket sk = socket.socket() sk.bind(( "127.0

[轉]sendpage漏洞分析 CVE-2009-2692

我的未来我决定 提交于 2020-02-26 19:20:24
之前看了《 新爆内核高危漏洞sock_sendpage的利用分析的讨论 》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自 我的空间 )。 有什么不足之处还望多多指教~ 内核的BUG 这个BUG首先得从sendfile系统调用说起。 考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket,然后循环地从文件fd中read数据,并将读取 的数据send到socket中。这样,每次读写我们都需要两次系统调用,并且数据会被从内核拷贝到用户空间(read),再从用户空间拷贝到内核 (send)。 而sendfile就将整个发送过程封装在一个系统调用中,避免了多次系统调用,避免了数据在内核空间和用户空间之间的大量拷贝。 ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); 虽然这个系统调用接收in和out两个fd,但是有所限制,in只能是普通文件,out只能是socket(这个限制不知道后来的内核版本有没有放宽)。 sendfile系统调用在内核里面是怎么实现的呢?这个还是比较复杂,它在内核里面做了原来要在用户态做的事情:创建一个pipe对象作buffer用、从in_fd中读数据到pipe中、将pipe中的数据写到out_fd

php流,stream,以及include/file_get_contents等的不全面深度解析

戏子无情 提交于 2020-02-26 12:57:27
最近在研究phar,看到里边有php流(stream)的内容 补了补课,收获颇多,在此整理记录一下: stream的有关函数: <?php var_dump(stream_get_transports()); // 获取已注册的套接字传输协议列表 var_dump(stream_get_wrappers());// 获取已注册的流类型 var_dump(stream_get_filters()); // 获取已注册的数据流过滤器列表 stream_context_create(); //流的修饰包装 提供PHP中streams函数列表如下: stream_bucket_append函数:为队列添加数据  stream_bucket_make_writeable函数:从操作的队列中返回一个数据对象 stream_bucket_new函数:为当前队列创建一个新的数据 stream_bucket_prepend函数:预备数据到队列  stream_context_create函数:创建数据流上下文 stream_context_get_default函数:获取默认的数据流上下文 stream_context_get_options函数:获取数据流的设置 stream_context_set_option函数:对数据流、数据包或者上下文进行设置 stream_context_set

理解Android进程创建流程

半世苍凉 提交于 2020-02-26 09:39:04
copy from : http://gityuan.com/2016/03/26/app-process-create/ 基于Android 6.0的源码剖析, 分析Android进程是如何一步步创建的,本文涉及到的源码: /frameworks/base/core/java/com/android/internal/os/ - ZygoteInit.java - ZygoteConnection.java - RuntimeInit.java - Zygote.java /frameworks/base/core/java/android/os/Process.java /frameworks/base/core/jni/com_android_internal_os_Zygote.cpp /frameworks/base/core/jni/AndroidRuntime.cpp /frameworks/base/cmds/app_process/App_main.cpp (内含AppRuntime类) /bionic/libc/bionic/fork.cpp /bionic/libc/bionic/pthread_atfork.cpp /libcore/dalvik/src/main/java/dalvik/system/ZygoteHooks.java /art

Android系统启动-Init篇

扶醉桌前 提交于 2020-02-26 09:38:40
copy from : http://gityuan.com/2016/02/05/android-init/ 基于Android 6.0的源码剖析, 分析Android启动过程进程号为1的init进程的工作内容 system/core/init/ - init.cpp - init_parser.cpp - signal_handler.cpp 一、概述 init进程是Linux系统中用户空间的第一个进程,进程号固定为1。Kernel启动后,在用户空间启动init进程,并调用init中的main()方法执行init进程的职责。对于init进程的功能分为4部分: 解析并运行所有的init.rc相关文件 根据rc文件,生成相应的设备驱动节点 处理子进程的终止(signal方式) 提供属性服务的功能 接下来从main()方法说起。 1.1 main [-> init.cpp] static int epoll_fd = -1; int main(int argc, char** argv) { ... //设置文件属性0777 umask(0); //初始化内核log,位于节点/dev/kmsg【见小节1.2】 klog_init(); //设置输出的log级别 klog_set_level(KLOG_NOTICE_LEVEL); //创建一块共享的内存空间,用于属性服务【见小节5.1

Android系统启动-zygote篇

那年仲夏 提交于 2020-02-26 09:38:02
copy from : http://gityuan.com/2016/02/13/android-zygote/ 基于Android 6.0的源码剖析, 分析Android启动过程的Zygote进程 /frameworks/base/cmds/app_process/App_main.cpp /frameworks/base/core/jni/AndroidRuntime.cpp /frameworks/base/core/java/com/android/internal/os/ - ZygoteInit.java - Zygote.java - ZygoteConnection.java /frameworks/base/core/java/android/net/LocalServerSocket.java /system/core/libutils/Threads.cpp 一. 概述 Zygote是由 init进程 通过解析init.zygote.rc文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是App_main.cpp,进程名为zygote。 service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server class