今天无意中在github上面看到了一个只有500行的HTTP服务器,顿时来了兴趣,花了一点时间读完了代码,并且把程序下载下来运行了一下,感觉略微有点失望.代码其实挺简单的,应该非常适合刚看了点UNIX网络编程,想找个小项目练练手的同学.
但是,我在编译程序的过程中却报了错,想想觉得不应该啊,但是一看到代码开头的注释才发现,这段程序是作者在1999年完成的,这十几年间,系统的API发生了一些变化,为了跟上时代的步伐,我把程序稍微修改了一下,更加适合现在的眼光.
首先,要修改Makefile,将其中的gcc -W-Wall -lsocket -lpthread -o httpd httpd.c ,改成gcc -W -Wall -o httpd httpd.c -lpthread.我的系统是Ubuntu 14.04,还需要设置库的搜索路径,增加-L参数,这个根据各自的配置按需要添加.
然后,需要将其中用到的accept,getsocketname函数的最后一个参数的类型改成socklen_t,原来的程序中用的是int.
接着是pthread_create函数,现在要求这个函数的第三个参数,也就是新线程的执行函数是(void *)func(void *)类型,那么,就要将accept_request函数改成要求的类型.
这里还有一个隐藏的bug,那就是由于要求的accept_request函数的参数是指针类型,那么,如果在一个连接到达后,调用新线程的accept_request函数之前,又有一个连接到达,由于参