資源簡介
《Linux高性能服務器編程》高清pdf+附帶源碼
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define?MAX_EVENT_NUMBER?1024
static?int?pipefd[2];
int?setnonblocking(?int?fd?)
{
????int?old_option?=?fcntl(?fd?F_GETFL?);
????int?new_option?=?old_option?|?O_NONBLOCK;
????fcntl(?fd?F_SETFL?new_option?);
????return?old_option;
}
void?addfd(?int?epollfd?int?fd?)
{
????epoll_event?event;
????event.data.fd?=?fd;
????event.events?=?EPOLLIN?|?EPOLLET;
????epoll_ctl(?epollfd?EPOLL_CTL_ADD?fd?&event?);
????setnonblocking(?fd?);
}
void?sig_handler(?int?sig?)
{
????int?save_errno?=?errno;
????int?msg?=?sig;
????send(?pipefd[1]?(?char*?)&msg?1?0?);
????errno?=?save_errno;
}
void?addsig(?int?sig?)
{
????struct?sigaction?sa;
????memset(?&sa?‘\0‘?sizeof(?sa?)?);
????sa.sa_handler?=?sig_handler;
????sa.sa_flags?|=?SA_RESTART;
????sigfillset(?&sa.sa_mask?);
????assert(?sigaction(?sig?&sa?NULL?)?!=?-1?);
}
int?main(?int?argc?char*?argv[]?)
{
????if(?argc?<=?2?)
????{
????????printf(?“usage:?%s?ip_address?port_number\n“?basename(?argv[0]?)?);
????????return?1;
????}
????const?char*?ip?=?argv[1];
????int?port?=?atoi(?argv[2]?);
????int?ret?=?0;
????struct?sockaddr_in?address;
????bzero(?&address?sizeof(?address?)?);
????address.sin_family?=?AF_INET;
????inet_pton(?AF_INET?ip?&address.sin_addr?);
????address.sin_port?=?htons(?port?);
????int?listenfd?=?socket(?PF_INET?SOCK_STREAM?0?);
????assert(?listenfd?>=?0?);
????//int?nReuseAddr?=?1;
????//setsockopt(?listenfd?SOL_SOCKET?SO_REUSEADDR?&nReuseAddr?sizeof(?nReuseAddr?)?);
????ret?=?bind(?listenfd?(?struct?sockaddr*?)&address?sizeof(?address?)?);
????if(?ret?==?-1?)
????{
????????printf(?“errno?is?%d\n“?errno?);
????????return?1;
????}
????//assert(?ret?!=?-1?);
????ret?=?listen(?listenfd?5?);
????assert(?ret?!=?-1?);
????epoll_event?events[?MAX_EVENT_NUMBER?];
????int?epollfd?=?epoll_create(?5?);
????assert(?epollfd?!=?-1?);
????addfd(?epollfd?listenfd?);
????ret?=?socketpair(?PF_UNIX?SOCK_STREAM?0?pipefd?);
????assert(?ret?!=?-1?);
????setnonblocking(?pipefd[1]?);
????addfd(?epollfd?pipefd[0]?);
????//?add?all?the?interesting?signals?here
????addsig(?SIGHUP?);
????addsig(?SIGCHLD?);
????addsig(?SIGTERM?);
????addsig(?SIGINT?);
????bool?stop_server?=?false;
????while(?!stop_server?)
????{
????????int?number?=?epoll_wait(?epollfd?events?MAX_EVENT_NUMBER?-1?);
????????if?(?(?number?0?)?&&?(?errno?!=?EINTR?)?)
????????{
????????????printf(?“epoll?failure\n“?);
????????????break;
????????}
????
????????for?(?int?i?=?0;?i?????????{
????????????int?sockfd?=?events[i].data.fd;
????????????if(?sockfd?==?listenfd?)
????????????{
????????????????struct?sockaddr_in?client_address;
????????????????socklen_t?client_addrlength?=?sizeof(?client_address?);
????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-04-27?15:42??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\
?????文件????????6148??2018-04-27?15:42??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\.DS_Store
?????目錄???????????0??2018-04-27?15:42??__MACOSX\
?????目錄???????????0??2018-04-27?15:42??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\
?????文件?????????120??2018-04-27?15:42??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\._.DS_Store
?????目錄???????????0??2018-04-27?15:42??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\
?????文件????????6148??2018-04-27?15:42??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\.DS_Store
?????目錄???????????0??2018-04-27?15:42??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\
?????文件?????????120??2018-04-27?15:42??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\._.DS_Store
?????目錄???????????0??2013-03-04?20:21??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\
?????文件????????2100??2012-05-11?21:55??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\9-6mytalk_client.cpp
?????目錄???????????0??2018-04-27?15:42??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\
?????文件?????????212??2012-05-11?21:55??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\._9-6mytalk_client.cpp
?????文件????????2736??2012-06-13?02:53??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\9-5unblockconnect.cpp
?????文件?????????212??2012-06-13?02:53??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\._9-5unblockconnect.cpp
?????文件????????4303??2013-03-04?20:18??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\9-8multi_port.cpp.bak
?????文件?????????212??2013-03-04?20:18??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\._9-8multi_port.cpp.bak
?????文件????????4400??2012-05-11?01:39??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\9-3mtlt.cpp
?????文件?????????212??2012-05-11?01:39??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\._9-3mtlt.cpp
?????文件????????4254??2013-03-04?20:21??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\9-8multi_port.cpp
?????文件?????????212??2013-03-04?20:21??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\._9-8multi_port.cpp
?????文件????????2515??2012-05-06?15:23??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\9-1use_select.cpp
?????文件?????????212??2012-05-06?15:23??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\._9-1use_select.cpp
?????文件????????5749??2012-05-12?01:50??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\9-7mytalk_server.cpp
?????文件?????????212??2012-05-12?01:50??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\._9-7mytalk_server.cpp
?????文件????????3899??2012-05-10?22:41??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\9-4oneshot.cpp
?????文件?????????212??2012-05-10?22:41??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\9\._9-4oneshot.cpp
?????文件?????????212??2013-03-04?20:21??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\._9
?????目錄???????????0??2013-01-18?19:15??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\11\
?????文件????????3657??2012-05-24?16:26??Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\11\11-2lst_timer.h
?????目錄???????????0??2018-04-27?15:42??__MACOSX\Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪紼嬫竻鏅癙DF+婧愮爜\LinuxServerCodes\11\
............此處省略143個文件信息
評論
共有 條評論