软件开发: 01 2010存档
使用http_load的过程中遇到了一个报错:Cannot assign requested address
网上找到了原因和解决方案 http://gcoder.blogbus.com/logs/41839731.html
但是要注意,这是客户端的问题,是客户端用光了端口号,所以要改客户端机器的配置和代码,不是改服务端的!
我在http_load.c里给socket加了一个SO_REUSEADDR,才能工作正常。为什么http_load不加上这个option呢?因为http_load测的是标准的http服务器,比如apache,这些服务端会关闭socket,而我测的是自己写的httpd,所以....看来细节很多啊。
====== 2010.08.18 ======
今天又遇到这个问题,在代码里加了SO_REUSEADDR也没用,只能采用在sysctl.conf里加:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
的办法
pthread_t pthr;
pthread_create(&pthr, NULL, thread_handler, NULL);
...
void* thread_handler(void* arg)
{
/* do something */
pthread_join(pthr, NULL);
}
上面的代码不好使,pthread_join不能放在pthread调用的handler内,虽然不报错,但是thread无法正常回收,如果多次创建thread,内存会越来越大(另一种形式的内存泄露)。
正确的做法是在handler外面pthread_join:
pthread_t pthr;
pthread_create(&pthr, NULL, thread_handler, NULL);
pthread_join(pthr, NULL);
...
void* thread_handler(void* arg)
{
/* do something */
}
如果不用pthread_join,改用pthread_detach呢?那最方便,但要注意:pthread_detach最好是放在handler里面第一句。
void* thread_handler(void* arg)
{
pthread_detach(pthr);
/* do something */
}
如果pthread_create后紧跟pthread_detach,有可能会出错。
小心使用grep里的星号(*)
grep "/home/.*test"
上面这句是找出所有/home目录下,以test结尾的文件
grep "/home/*test"
这句可就不是了,这句grep只匹配以下的文件名:
/hometest
/home/test
/home//test
/home///test
看明白了,星号(*)代表重复其前面的字符任意次(包括零),而“/*“当然就表示重复”/”任意次。
另外注意grep后面的正则表达式务必加上双引号,如果不加,在一些特殊场合会有完全不同的含义。
比如我当前目录下有六个文件:
testa
testb
testc
testd
tt
t
运行:
ls -l|grep t*t
它会把这五个文件都列出来吗?不,结果显示只找到了文件tt
因为上面的shell命令,grep实际上是在找以t开头且以t结尾的文件(这一规则和ls的规则一样)
要想grep把后面的”t*t”当成正则表达式,需要加上双引号:
ls -l|grep "t*t"
这下结果ok了:所有六个文件都可以被找到。
{
....
int errno
};
上面的example结构使用errno做成员变量名,按理说不会和<errno.h>里的errno宏冲突,因为它在struct里,何况我根本没有包含errno.h文件
在大部分机器上,这可以编译成功。但是,在有的环境确实无法编译通过,gcc不认errno前面的“->”指针符号。
看来<errno.h>里的errno宏漏进了文件,但是怎么漏进来的?不详。
这位老兄和我遇到的问题一样: http://gcc.gnu.org/ml/gcc/2001-12/msg00766.html
但那毕竟是老gcc下的问题了,现在应该没有了。
在查到详细原因之前,还是把errno改了为妙,毕竟变量名和系统全局变量(或宏)弄成一样,是有风险的。
“我能见一下为我做这份晚餐的厨师吗?”
因为他要当面感谢这个为烹饪美食的厨师。
食物是上帝赐予的,所以要感谢上帝;美餐是厨师制造的,所以也要感谢厨师。这是多好的习惯!法式料理全球有名,皆是此伟大习惯所赐。
昨晚梅坚请客,看了电影《avatar》。没啥可说的,也不需我再加评论——满分。这才称得上大片。大家抓紧去电影院看,12年了,我就推荐大家去电影院看这么一部,不算过分了。
真得好好感谢导演,James Cameron同学,他从97年拍完《泰坦尼克号》就开始构思《avatar》的剧情,2006年8月开始拍摄,三年多的辛劳,终成大作。James,可爱的老头,12年了,终于落叶归根,从商业片里沉淀而出,回到了童年,拍出了这部如所有人童年一般纯洁透明的电影。
做为一个对音乐和声音敏感的人,我还要感谢影片的作曲,老熟人 James Horner,之所以称熟人,是因为我所喜欢的《勇敢的心》、梅坚所喜欢的《异形2》、大家所喜欢的《泰坦尼克号》(97年)、奥斯卡评委所喜欢的《美丽 心灵》,都是由他作曲配乐。而《avatar》里的配乐,更秉承了James Horner一贯的轻盈、灵快的风格。感谢James Horner为我们带来的天籁之音。
当然,还要感谢梅坚。有人请客看电影,感觉更好。
当我用gcc的时候,我感谢Richard Stallman,如果不是他带头做出了如此出色的编译器,带头启动了GNU,我可能还在用VC开发,VC太贵了,我买不起的。
当我用linux的时候,我感谢Linus,感谢Alon Cox,当然,还有所有内核开发者,不是他们做出了这么出色的OS,我现在可能还在windows下开发,windows太贵了,我买不起的。
感谢这些计算机领域的英雄,他们就是潘多拉星球上的“魅影骑士”,有他们在,我们的editor,我们的compiler,我们的OS,我们的家园,才不会被某个超级跨国软件公司所霸占、所蚕食、所掠夺。我们才能在大树下自由的开发。
请追随这些英雄们。
《avatar》开篇曲
http://www.liamdelahunty.com/tips/linux_send_html_email_from_command_line.php
很简单,在html文件(比如my.html)前面补上三行:
To: hao.bigrat@example.com
Subject: OhMyGod
Content-Type: text/html; charset="gbk"
<html>
<table>
......
然后
sendmail hao.bigrat@example.com < my.html