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

  • 大小: 10KB
    文件類型: .7z
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-29
  • 語言: 其他
  • 標簽: ICS??lab10??WebProxy??

資源簡介

ICS lab10 WebProxy 包含 proxy.c

資源截圖

代碼片段和文件信息

/*
?*?proxy.c?-?CS:APP?Web?proxy
?*
?*?TEAM?MEMBERS:
?*?????Andrew?Carnegie?ac00@cs.cmu.edu?
?*?????Harry?Q.?Bovik?bovik@cs.cmu.edu
?*?
?*?A?simple?web?proxy?implement.
?*?No?cache.?No?thread?pool.?No?post?method.
?*?
?*/?

#include?“csapp.h“
#include?

#define?_DEBUG

#define?DEFPORT?8888

typedef?struct?client_info
{
??int?connfd;
??struct?sockaddr_in?sockaddr;
}?client_info_t;

/*
?*?Gloval?vars
?*/
sem_t?sem_log;
sem_t?sem_dns;
FILE?*log_file;

/*
?*?Function?prototypes
?*/
int?parse_uri(char?*uri?char?*target_addr?char?*path?int?*port);
void?format_log_entry(char?*logstring?struct?sockaddr_in?*sockaddr?char?*uri?int?size);
void?*work_init(void?*arg);
void?do_work(int?connfd?struct?sockaddr_in?*sockaddr);
void?my_clienterror(int?fd?int?errnum?char?*errmsg?char?*longmsg);
int?open_clientfd_ts(char?*hostname?int?port);
int?Open_clientfd_ts(char?*hostname?int?port)?;
void?dbg_printf(char?*format?...);



/*
?*?dbg_printf?-?only?print?msg?in?debug?mode
?*/
void?dbg_printf(char?*format?...)
{
#ifdef?_DEBUG
????va_list?va;
????va_start(va?format);
????vprintf(format?va);
????va_end(va);
#endif
}

/*
?*?wrapper?of?three?rio?functions
?*/
ssize_t?Rio_readnb_w(rio_t?*rp?void?*usrbuf?size_t?n)?
{
????ssize_t?rc;

????if?((rc?=?rio_readnb(rp?usrbuf?n))?????{
??????fprintf(stderr?“Rio_readnb?error:?%s\n“?strerror(errno));
??????return?0;
????}
????return?rc;
}

ssize_t?Rio_readlineb_w(rio_t?*rp?void?*usrbuf?size_t?maxlen)?
{
????ssize_t?rc;

????if?((rc?=?rio_readlineb(rp?usrbuf?maxlen))?????{
??????fprintf(stderr?“Rio_readlineb?error:?%s\n“?strerror(errno));
??????return?0;
????}
????return?rc;
}?

void?Rio_writen_w(int?fd?void?*usrbuf?size_t?n)?
{
????if?(rio_writen(fd?usrbuf?n)?!=?n)
??????fprintf(stderr?“Rio_writen?error:?%s\n“?strerror(errno));
}

/*
?*?Open_clientfd_ts?-?wrapper?of?open_clientfd_s
?*/
int?Open_clientfd_ts(char?*hostname?int?port)?
{
????int?rc?=?open_clientfd_ts(hostname?port);
????if?(rc?==?-1)
??????unix_error(“Open_clientfd_s?Unix?error“);
????else?if(rc?==?-2)????????
????dns_error(“Open_clientfd_s?DNS?error“);
????return?rc;
}

/*
?*?open_clientfd_s?-?thread-safe?version?for?open_clientfd
?*/
int?open_clientfd_ts(char?*hostname?int?port)?
{
????int?clientfd;
????struct?hostent?*hp;
????struct?sockaddr_in?serveraddr;

????if?((clientfd?=?socket(AF_INET?SOCK_STREAM?0))???????return?-1;?/*?check?errno?for?cause?of?error?*/

????/*?Fill?in?the?server‘s?IP?address?and?port?*/
????P(&sem_dns);
????if?((hp?=?gethostbyname(hostname))?==?NULL)
????{
??????V(&sem_dns);
??????return?-2;?/*?check?h_errno?for?cause?of?error?*/
????}?
????bzero((char?*)?&serveraddr?sizeof(serveraddr));
????serveraddr.sin_family?=?AF_INET;
????bcopy((char?*)hp->h_addr_list[0]?
??(char?*)&serveraddr.sin_addr.s_addr?hp->h_length);
????V(&sem_dns);
????serveraddr.sin_port?=?htons(port);

????/*?Establish?a?connection?with?the?server?*/
????if?(connect(clientfd?(SA?*)?&serveraddr?sizeof(ser

評論

共有 條評論