echoServer IO復用實現

2021-07-31 09:21:48 字數 1593 閱讀 3669

還有很多問題,等待更新吧,哎,凡事需要自己寫一遍,道理誰都懂;寫完再和別人的**對比。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define max 65536

void echo(int sockfd, int epollfd)

else

if (len == 0)

return;

}//send

printf("recv...\n");

if (send(sockfd, buf, len, 0) != len)

}void* run(void *arg)}}

return (void*)0;

}int main(void)

int reuse = 1;

setsockopt(listenfd, sol_socket, so_reuseaddr, &reuse, sizeof(reuse));

struct sockaddr_in listen_addr;

bzero(&listen_addr,sizeof(listen_addr));

listen_addr.sin_family = af_inet;

listen_addr.sin_addr.s_addr = htonl(inaddr_any);

listen_addr.sin_port = htons(12345);

if ( bind(listenfd, (struct sockaddr *)&listen_addr, sizeof(listen_addr)) < 0)

if (listen(listenfd,5) < 0)

//printf("listening... on ip , port %d\n",12345);

printf("listening... \n");

// i/o- multiplexing

int epollfd = epoll_create1(0);

if (epollfd < 0)

pthread_t pid;

if (pthread_create(&pid, null, run, (void *)&epollfd) < 0)

//accept

struct sockaddr_in cli_addr;

int len =sizeof(cli_addr);

int acceptfd;

int cnt = 0;

while (1)

else

}if (pthread_join(pid,null) < 0)

return

0;}

還有很多任務作沒做。。。

1. 壓力測試。。。

2. 其他各種測試。。。

3. 另,上訴**更改下可以測試epoll lt模式,其中如果資料沒有處理,會一直觸發。

頻分復用 時分復用和碼分復用

頻分復用 fdm 按頻率劃分的不同通道,使用者分到一定的頻帶後,在通訊過程中自始至終都占用這個頻帶,可見頻分復用的所有使用者在同樣的時間占用不同的頻寬資源 頻寬指頻率帶 時分復用 tdm 按時間劃分成不同的通道,每乙個時分復用的使用者在每乙個tdm幀中占用固定序列號的間隙,可見時分復用的所有使用者是...

頻分復用 時分復用和碼分復用

頻分復用 fdm 按頻率劃分的不同通道,使用者分到一定的頻帶後,在通訊過程中自始至終都占用這個頻帶,可見頻分復用的所有使用者在同樣的時間占用不同的頻寬資源 頻寬指頻率帶 時分復用 tdm 按時間劃分成不同的通道,每乙個時分復用的使用者在每乙個tdm幀中占用固定序列號的間隙,可見時分復用的所有使用者是...

傳輸層的復用和解復用

這兩個特殊的域別成為源埠號和目的埠號。每個埠號都是16位整數,從0 65535,其中0 1023是知名埠號,被一些熟知的應用占用 一般,客戶端應用讓傳輸層自動分配埠號,而伺服器端應用需要分配乙個指定的埠號。udp socket需要兩元組 目的主機ip位址和目的埠號 假定乙個程序在主機a中,使用udp...