91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小:
    文件類型: .7z
    金幣: 2
    下載: 5 次
    發布日期: 2023-07-27
  • 語言: 其他
  • 標簽: linux??code??pdf??

資源簡介

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?????????{
????????????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?);
????????????

評論

共有 條評論