linux原始套接口编程总结

2010年5月6日 admin 没有评论

linux建立socket的函数如下

#include 
int socket(int family, int type, int protocol);

访问linux的原始套接口有两种方法:传统方式是将type参数设为SOCK_PACKET,缺点是不够灵活,目前已不推荐使用了;另一种方式是将family参数设置为PF_PACKET。同时protocol设为不为0的值,用来表示链路层帧的格式,比如使用ETH_P_IP代表IPv4的帧格式,ETH_P_ARP代表ARP帧格式等等。另外type参数可选择SOCK_DGRAM(返回去掉链路层帧头部的帧),或是SOCK_RAW(返回帧为完全帧)。如果对应所用类型只存在一个合法的protocol,则可将protocol这个参数设置为0。

/*读取以太网上所有的帧*/
fd = socket(AP_INET, SOCK_PACKET, htons(ETH_P_ALL)); /*传统方式*/

fd = socket(PF_SOCKET, SOCK_RAW, htons(ETH_P_ALL)); /*推荐方式*/

/*读取以太网上所有的IPv4帧*/
fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_IP)); /*传统方式*/

fd = socket(PF_SOCKET, SOCK_RAW, htons(ETH_P_IP)); /*推荐方式*/
分类: Other 标签:

UNP学习总结[1]

2010年4月29日 admin 没有评论

1.关于MSS
MSS(Maximum Segement Size)即最大分段大小,设置此项的目的是尽量避免数据包的分片。

2.关于捎带
通常服务器处理请求并产生应答的时间小于200MS则可能产生捎带。

3.关于TIME_WAIT状态
TCP链接的关闭包括四个分节。首先主动关闭方(一般是客户端)发送一个FIN分节,服务器会相应一个ACK分节,此时主动关闭一方不再有数据发送。被动关闭一方会在数据发送完毕之后向主动方发送一个FIN分节,主动关闭一方会响应一个ACK分节,至此被动关闭一方链接状态变为CLOSED,而主动关闭一方则是TIME_WAIT,并在此状态上停留一段时间,一般这段时间是最长分节生命周期(MSL)的2倍。
设置此状态的理由:
1)可靠实现TCP全双工链接的终止:当被动关闭的一方发送的FIN在中途丢失的话,主动关闭方不会发送ACK,此时导致被动一方超时重传FIN分节,从而正常关闭链接。
2)允许老的重复的分节在网络中自动消逝:可能会有分节因为中途路由器的原因在主动关闭方发送ACK之后才到达,设置TIME_WAIT允许这样的分节消逝之后再启动新的链接。

4.关于套接口的写返回
每个TCP套接口都有缓冲区,可以使用SO_SNDBUF选项改变缓冲区大小。对TCP套接口的write调用成功返回只代表数据成功拷贝到发送缓冲区,并不代表数据已经被对端接收到,TCP必须保留数据拷贝直到收到对端确认才能在缓冲区中删除。

分类: C, Linux 标签:

密码保护:某题

2010年3月12日 admin 查看留言请输入密码

这是一篇受密码保护的文章。您需要提供访问密码:


分类: C 标签:

Ubuntu中安装PHP的memcached扩展

2010年2月26日 admin 没有评论

关于什么是memcached ,这里 有一篇简单介绍可以参考。在google上搜索到的中文安装教程基本上都是来源于同一篇文章,事实证明这篇文章并不适合所有环境。

以下内容部分参考了PHP官方Manual的内容。

1.首先安装libevent库,直接使用软件源来安装: sudo apt-get install libevent-dev

2.之后在这里下载memcached的最新版本源代码:wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
解压缩:tar zxvf memcached-1.4.4.tar.gz
编译,安装:./configure & make & sudo make install
注:这里configure 不需要加 libevent的安装路径

3.正常情况下memcached已经成功安装,现在运行一下:memcached -d -m 20 -u root -l 127.0.0.1 -p 11211
参数的意义:-d daemon模式运行 -m 分配的内存大小(单位是M) -u 执行的用户 -l 绑定的监听IP -p 端口号
如果现在使用 netstat -ant | grep 11211 命令查看的话一概能看到有程序在监听端口了。

4.下面开始安转PHP5的memcached扩展模块,同样使用强大的软件源:sudo apt-get install php5-memcache
接着打开配置文件: sudo vi /etc/php5/conf.d/memcache.ini ,如果看到 extension=memcache.so 这句前面有分号注释,请将分号去掉。

5.按照Manual的说法这样已经安装完成,可以使用下面的代码测试:

connect('localhost', 11211) or die ("Could not connect");

$version = $memcache->getVersion();
echo "Server's version: ".$version."
\n";

$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;

$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)
\n";

$get_result = $memcache->get('key');
echo "Data from the cache:
\n";

var_dump($get_result);
?>

代码来源于这里,根据你自己的参数适当修改。

6.事实上在我自己机器上安装时,此时访问测试文件会显示:PHP Fatal error: Class Memcache not found.也就是memcache类未找到。打开shell,执行 php -m 显示php所安装的扩展时并没有出现memcache,同时看到:

PHP Warning:  PHP Startup: Unable to load dynamic library './memcache.so' - ./memcache.so:
cannot open shared object file: No such file or directory

也就是说php在加载模块时并没有找到memcache.so文件。经过一番查找,终于找到这个文件的路径是 /usr/lib/php5/20060613+lfs/memcache.so,而通过php -i | grep php.ini 发现php.ini的路径是 /usr/local/lib/ ,并且在php.ini 中 extension_dir 设置的值是 ./ 也就是当前目录,也就难怪找不到扩展目录了。修改php.ini 中 extension_dir 的值为/usr/lib/php5/20060613+lfs/ ,重新执行 php -m 可以看到warning不存在了,同时下边也会列出 memcache 模块已经安装。此时再次访问刚才的测试文件,已经能够显示正常了。

Server's version: 1.4.4
Store data in the cache (data will expire in 10 seconds)
Data from the cache:
object(stdClass)#3 (2) { ["str_attr"]=> string(4) "test" ["int_attr"]=> int(123) }

不知道这个问题是不是因为我的php是通过自己手动编译安装时使用的是默认目录有关系。

分类: Linux, Other 标签: , ,

Ubuntu9.10系统没有声音解决办法

2009年9月27日 admin 没有评论

从Alpha4开始就装上了9.10直到前两天看flash才发现系统没有声音==! 声音的属性一直都没有自己更改过,完全是系统安装时后默认的,估计又是一个bug。到launchpad上查看果然已经有人提交BUG了,而且有人给出了简单的修改办法。不过这个解决办法应该只适合DELL的机器。

首先看下系统配置:lspci -nn

00:00.0 Host bridge [0600]: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub [8086:27a0] (rev 03)
00:02.0 VGA compatible controller [0300]: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller [8086:27a2] (rev 03)
00:02.1 Display controller [0380]: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller [8086:27a6] (rev 03)
00:1b.0 Audio device [0403]: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller [8086:27d8] (rev 01)
00:1c.0 PCI bridge [0604]: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 [8086:27d0] (rev 01)
00:1c.1 PCI bridge [0604]: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 [8086:27d2] (rev 01)
00:1c.3 PCI bridge [0604]: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 [8086:27d6] (rev 01)
00:1d.0 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 [8086:27c8] (rev 01)
00:1d.1 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 [8086:27c9] (rev 01)
00:1d.2 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 [8086:27ca] (rev 01)
00:1d.3 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 [8086:27cb] (rev 01)
00:1d.7 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller [8086:27cc] (rev 01)
00:1e.0 PCI bridge [0604]: Intel Corporation 82801 Mobile PCI Bridge [8086:2448] (rev e1)
00:1f.0 ISA bridge [0601]: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge [8086:27b9] (rev 01)
00:1f.2 IDE interface [0101]: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA IDE Controller [8086:27c4] (rev 01)
00:1f.3 SMBus [0c05]: Intel Corporation 82801G (ICH7 Family) SMBus Controller [8086:27da] (rev 01)
02:00.0 Ethernet controller [0200]: Broadcom Corporation BCM4401-B0 100Base-TX [14e4:170c] (rev 02)
02:01.0 FireWire (IEEE 1394) [0c00]: Ricoh Co Ltd R5C832 IEEE 1394 Controller [1180:0832]
02:01.1 SD Host controller [0805]: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter [1180:0822] (rev 19)
02:01.2 System peripheral [0880]: Ricoh Co Ltd R5C843 MMC Host Controller [1180:0843] (rev 0a)
02:01.3 System peripheral [0880]: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter [1180:0592] (rev 05)
02:01.4 System peripheral [0880]: Ricoh Co Ltd xD-Picture Card Controller [1180:0852] (rev ff)
0c:00.0 Network controller [0280]: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection [8086:4222] (rev 02)

看到audio device 是 00:1b.0 Audio device [0403]: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller。

首先保证声音属性设置正确,我这个就是安装时候默认的

<PIC>

然后打开 sudo /etc/modprobe.d/alsa-base.conf

在文件最下方加入一行: options snd-hda-intel model=dell-m4-1

这样系统就有声音了。从model的值来看这个方法也应该是只适用于DELL的机器。

分类: Linux 标签: ,

Apache2,no service installed[For Win]

2009年9月14日 admin 没有评论
解决方法:  找到 apache2 目录下的 bin 目录 有个apache.exe 文件,在运行中键入:cmd ,出来DOS窗口
键入:   d:\     注释:进入D盘,假如apache安装在D盘
键入:   cd apache2    注释:进入D:\apache2\目录
键入:   cd bin    注释:进入D:\apache2\bin\ 目录
键入: apache.exe -k install -n apache2    注释:添加了apache2这个服务了,下面我们要启动它
键入:    net start apache2   注释:启动apache2服务  关闭服务器是: net stop apache2
分类: Other 标签: ,