socket close shutdown函数区别

close() 关闭这个socket销毁内存中数据,如果多个进程复用,只影响单个进程。
shutdown() 并不销毁内存中socket,如果多个进程复用,会影响所有进程。

如果接受缓冲区内还有数据没recv完,调用close()会出发RST报文,此时先调用shutdown,再调用close则能正常关闭。

微软把.net带到Linux Mac上

微软在他的Build developer conference发布了.NET Core runtime for Linux Mac的preview。
他将把.net的主要功能带到Linux和Mac上。
同时微软还发布了一个跨平台的轻量级代码编辑器Visual Studio Code。
还宣布将让Android和Iphone的程序能够更简单的移植到Windows10上,甚至可以复用大部分的java ,c++甚至swift代码。

随着移动设备的发展,windows的传统地位不断地受到挑战,windows系统在移动设备上丧失了统治地位,只有把更好的东西带到其他平台,让其他平台的东西更好的进入windows才能刷新微软的存在感,

Linux清理磁盘cache

Linux下sync命令可以将脏数据flush入磁盘。如果想要将所有的缓存也清除,必须在sync之后执行

清除page cache
echo 1 > /proc/sys/vm/drop_caches

清除 dentries & inodes
echo 2 > /proc/sys/vm/drop_caches

同时清除page cache和dentries以及inodes
echo 3 > /proc/sys/vm/drop_caches

记得必须先执行sync不然脏数据的缓存是不会被清除的。

hash表取模技巧

在使用hash表的时候,由于hash表的size不可能无限大,我们必须将hash function求出来的index值映射到hash表的size范围内。一般情况下都是采取取模的形式index % size,但是modulus操作要进行除法运算,在数据量大的时候效率较低,这时候我们可以将size设置为2的某次方,这样只要将index & (size – 1)就可以求得模值,至于为什么是这样,原理很简单,我就不在此赘述了。

bash $用法

$$ 当前bash进程号
$0 当前bash文件名
$? 上一指令的返回值
“$*”参数的内容,单字符串返回,中间以空格分开
“$@”参数内容,返回多个字符串。
$#参数的个数。

shellshock强势袭来

shelllock强势袭来,这次漏洞出在俺们最常用的Bash里,而且是从v1到v4潜伏了20多年,基本原理类似SQL注入,BASH会对环境变量值中函数定义后的字符串进行处理:

env X="() { :;} ; cmd" bash -c 'some cmd'

由于本人没有看过Bash的源码,对注入的机制了解不是很深入,根据搜集到的信息:上面的命令将空函数export给环境变量x。 bash内部会将定义成函数的环境变量以一种规范的字符串形式保存,当子bash执行的时候会将这个环境变量作为函数名,对这个函数定义的字符串进行求值,这时候跟在后面的那个命令也被执行了,通过这种方法骇客就可以注入任何他想要的东西。