<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jackywgw的专栏]]></title><description><![CDATA[c/c++ linux php web mysql python tcp/ip shell java]]></description><link>https://blog.youkuaiyun.com/jackywgw</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jackywgw]]></copyright><item><title><![CDATA[TCP 滑动窗口/TCP 接收和发送缓冲区/内核sock接收和发送缓冲区]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78433894</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78433894</guid><author>jackywgw</author><pubDate>Fri, 03 Nov 2017 11:37:06 +0800</pubDate><description><![CDATA[一个socket在内核中有两个缓冲区，分别为接收和发送缓冲区。
struct sock { 
   …… 
    struct sk_buff_head    sk_receive_queue;—-接收队列 
    struct sk_buff_head    sk_write_queue;——发送队列 
   …… 
}； 
2. socket编程中可以通过以下API设置：setsockopt]]></description><category></category></item><item><title><![CDATA[TCP/IP学习--------------- MSS]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78432390</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78432390</guid><author>jackywgw</author><pubDate>Fri, 03 Nov 2017 10:26:24 +0800</pubDate><description><![CDATA[MSS（max segment size: 最大报文段长度）：TCP 可以发送的最大数据长度， 不包括IP首部（20字节）和TCP首部（20字节）。 
1.  MSS 默认是536字节。 
20字节IP首部 + 20字节TCP首部 + 536字节MSS = 576字节的IP数据报文 
2.  MSS一般为出口MTU值减去IP首部和TCP首部 
如MTU为576字节， 则对应的MSS = 576-20]]></description><category></category></item><item><title><![CDATA[快速排序算法]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78414190</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78414190</guid><author>jackywgw</author><pubDate>Wed, 01 Nov 2017 14:59:10 +0800</pubDate><description><![CDATA[#include <stdio.h>                                                                                                                                                                          
#include <st]]></description><category></category></item><item><title><![CDATA[基于字符串的分离链接hash算法]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78341547</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78341547</guid><author>jackywgw</author><pubDate>Wed, 25 Oct 2017 14:56:03 +0800</pubDate><description><![CDATA[Hashes 
      问题：你有一个很大的字符串数组。需要知道另外一个字符串是否在这个字符串数组中。你可能会将这个字符串与数组中的字符串依次作比较。但是实际中，你会发现这种方法太慢。必须找其它的方法。但是除了依次比较字符串外，还有没有其它方法来知道某个字符串是否存在呢？ 
      解决方案： Hashes。  Hashes是用小的数据类型（如，数字）来表示其它大的数据类型（通常是字符串）。]]></description><category></category></item><item><title><![CDATA[linux 网桥接收处理流程]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78321226</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78321226</guid><author>jackywgw</author><pubDate>Mon, 23 Oct 2017 17:38:40 +0800</pubDate><description><![CDATA[linux 网桥接收处理流程]]></description><category></category></item><item><title><![CDATA[linux网桥处理函数学习------br_handle_frame_finish]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78297514</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78297514</guid><author>jackywgw</author><pubDate>Fri, 20 Oct 2017 17:10:59 +0800</pubDate><description><![CDATA[/* note: already called with rcu_read_lock */
int br_handle_frame_finish(struct sock *sk, struct sk_buff *skb)
{
    const unsigned char *dest = eth_hdr(skb)->h_dest;
    struct net_bridge_port *p = br]]></description><category></category></item><item><title><![CDATA[linux网桥处理函数学习-----br_handle_frame]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78296072</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78296072</guid><author>jackywgw</author><pubDate>Fri, 20 Oct 2017 15:32:55 +0800</pubDate><description><![CDATA[/*
 * Return NULL if skb is handled
 * note: already called with rcu_read_lock
 */
rx_handler_result_t br_handle_frame(struct sk_buff **pskb)
{
    struct net_bridge_port *p;
    struct sk_buff *skb =]]></description><category></category></item><item><title><![CDATA[syn  flood攻击防范]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78103530</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78103530</guid><author>jackywgw</author><pubDate>Tue, 26 Sep 2017 16:54:11 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[libevent 事件的优先级队列]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78097551</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78097551</guid><author>jackywgw</author><pubDate>Tue, 26 Sep 2017 15:51:58 +0800</pubDate><description><![CDATA[多个事件同时触发时，libevent每一定义各个回调函数的执行顺序。可以使用优先级来定义某些事件比其它事件更重要。libevent里面的优先级队列就是active队列数组，当epoll返回event时，根据event对应的优先级放入队列的active数组列表中，实现了优先级的概念 
1. event_Base的优先级队列
libevent中，每个event_base都有与之相关的一个或者多个优先级。]]></description><category></category></item><item><title><![CDATA[git push 时常见错误]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/78092666</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/78092666</guid><author>jackywgw</author><pubDate>Tue, 26 Sep 2017 10:41:24 +0800</pubDate><description><![CDATA[git push -u origin master
------------------------------------------------------------------------------
错误 1. 

-------------------------------------------------------------------------------
er]]></description><category></category></item><item><title><![CDATA[静态对象的初始化]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/77671071</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/77671071</guid><author>jackywgw</author><pubDate>Tue, 29 Aug 2017 10:14:19 +0800</pubDate><description><![CDATA[//============================================================================
// Name        : StaticObjectsInFunctions.cpp
// Author      : gwwu
// Version     :
// Copyright   : Your copyright notic]]></description><category></category></item><item><title><![CDATA[c++中的引用]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/77650884</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/77650884</guid><author>jackywgw</author><pubDate>Mon, 28 Aug 2017 17:01:24 +0800</pubDate><description><![CDATA[//============================================================================
// Name        : FreeStandingReferences.cpp
// Author      : gwwu
// Version     :
// Copyright   : Your copyright notice]]></description><category></category></item><item><title><![CDATA[c++学习----const常量折叠]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/77533119</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/77533119</guid><author>jackywgw</author><pubDate>Thu, 24 Aug 2017 17:35:03 +0800</pubDate><description><![CDATA[//============================================================================
// Name        : Constant_folding.cpp
// Author      : gwwu
// Version     :
// Copyright   : Your copyright notice
// Des]]></description><category></category></item><item><title><![CDATA[C++中struct 和 class的sizeof大小]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/77505342</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/77505342</guid><author>jackywgw</author><pubDate>Wed, 23 Aug 2017 14:12:05 +0800</pubDate><description><![CDATA[//============================================================================
// Name        : Sizeof.cpp
// Author      : gwwu
// Version     :
// Copyright   : Your copyright notice
// Description :]]></description><category></category></item><item><title><![CDATA[First head 设计模式学习c++实现------模板方法模式（Template method pattern）]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/77248239</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/77248239</guid><author>jackywgw</author><pubDate>Wed, 16 Aug 2017 15:16:10 +0800</pubDate><description><![CDATA[模板方法模式： 
在一个方法中定义一个算法的骨架，而将一些步骤推迟到子类中。 
/*
 * CaffeineBeverage.h
 *
 *  Created on: Aug 16, 2017
 *      Author: gwwu
 */#ifndef CAFFEINEBEVERAGE_H_
#define CAFFEINEBEVERAGE_H_
#include <iostream>
usin]]></description><category></category></item><item><title><![CDATA[linux shell命令查看接口索引--ip link show]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/76640678</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/76640678</guid><author>jackywgw</author><pubDate>Thu, 03 Aug 2017 17:57:18 +0800</pubDate><description><![CDATA[AH-00c080:/tmp/home/admin$ ip link show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: tunl0@NONE:  mtu 1480 qdisc noop state DOWN]]></description><category></category></item><item><title><![CDATA[__attribute__ ((packed)) 的作用]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/76548899</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/76548899</guid><author>jackywgw</author><pubDate>Tue, 01 Aug 2017 17:39:40 +0800</pubDate><description><![CDATA[看到内核代码里面有attribute ((packed)) ，感觉比较奇怪，查了百度后知道其作用。 
attribute ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐，是GCC特有的语法。这个功能是跟操作系统没关系，跟编译器有关，gcc编译器不是紧凑模式的，在windows下，用vc的编译器也不是紧凑的，用tc的编译器就是紧凑的。例如： 
在T]]></description><category></category></item><item><title><![CDATA[C++ Vector size和capcity的增加方式]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/75119056</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/75119056</guid><author>jackywgw</author><pubDate>Fri, 14 Jul 2017 16:06:15 +0800</pubDate><description><![CDATA[创建一个vector对象vector a;后， vector对象a的size和capacity都是0。 
当插入第一个元素后，size和capacity都变为1 
当插入第二个元素后，size和capacity都变为2 
当插入第三个元素后，size变为3， 由于capacity为2，小于3， 则capacity=capacity*2,变成4 
…… 
当插入第五个元素后，size变为5， 由于ca]]></description><category></category></item><item><title><![CDATA[自动创建proc文件]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/75019679</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/75019679</guid><author>jackywgw</author><pubDate>Wed, 12 Jul 2017 15:33:47 +0800</pubDate><description><![CDATA[#include <linux/module.h>  
#include <linux/sched.h>  
#include <linux/proc_fs.h>  
#include <linux/seq_file.h>  
#include <linux/uaccess.h>  
#include <linux/slab.h>  
typedef struct proc_private_data]]></description><category></category></item><item><title><![CDATA[自动注册/proc文件]]></title><link>https://blog.youkuaiyun.com/jackywgw/article/details/75019157</link><guid>https://blog.youkuaiyun.com/jackywgw/article/details/75019157</guid><author>jackywgw</author><pubDate>Wed, 12 Jul 2017 15:28:46 +0800</pubDate><description><![CDATA[static int counter_proc_show(struct seq_file *m, void *v)
{
    seq_printf(m, linux_proc_banner, utsname()->sysname, utsname()->release, utsname()->release, utsname()->version);
    /*
    seq_printf(m]]></description><category></category></item></channel></rss>