tcp伺服器示例 使用epoll監聽併發連線

2021-10-01 14:14:59 字數 1670 閱讀 4873

程式功能:監聽tcp客戶端連線,並用epoll監聽這些客戶端傳送的資料,相當於乙個日誌接收器

#include #include #include #include #include #include #include #include #include #include #include #define max_event   20

#define buff_size 100*1024

//epoll控制代碼

int epfd = 0;

void add_epoll_socket(int fd, epoll_events et);

void delete_epoll_socket(int fd, epoll_events et);

int main(int argc, char *ar**)

//建立服務端socket,監聽埠:ar**[1]

int serv_sock=socket(pf_inet, sock_stream, 0);

if(serv_sock == -1)

struct sockaddr_in serv_addr;

memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family=af_inet;

serv_addr.sin_addr.s_addr=htonl(inaddr_any);

serv_addr.sin_port=htons(atoi(ar**[1]));

if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)

if(listen(serv_sock, 5)==-1)

//建立epoll控制代碼

epfd = epoll_create(max_event);

if (epfd < 0)

add_epoll_socket(serv_sock, epollin);

int i, ret, len, fd;

struct epoll_event events[max_event];

char buff[buff_size] = ;

char log[buff_size] = ;

char *begin, *end;

while (1)

char *addr = inet_ntoa(client_addr.sin_addr);

printf("client_sock=%d, addr=%s\n", client_sock, addr);

//不監聽回送連線

if (strcmp(addr, "127.0.0.1") != 0)

}else

printf("buff='%s'\n", buff);

memset(buff, 0, buff_size);

}} //for

} //while (1)

close(epfd);

close(serv_sock);

return 0;

}void add_epoll_socket(int fd, epoll_events evt)

void delete_epoll_socket(int fd, epoll_events evt)

單程序tcp伺服器 epoll版

1 沒有最大併發連線的限制,能開啟的fd 指的是檔案描述符,通俗的理解就是套接字對應的數字編號 的上限遠大於1024。2 效率提公升,不是輪詢的方式,不會隨著fd數目的增加效率下降。只有活躍可用的fd才會呼叫callback函式 即epoll最大的優點就在於它只管你 活躍 的連線,而跟連線總數無關,...

TCP伺服器實現epoll併發實現

原始碼在最下方 併發伺服器 tcp伺服器百萬級連線 申請乙個int sockfd socket af inet,sock stream,0 初始化乙個例項sockaddr in struct sockaddr in addr memset addr,0,sizeof struct sockaddr ...

tcp 客戶 伺服器程式示例

1 client 從標準輸入讀入一行文字,並寫給伺服器。2 伺服器從網路輸入讀入這行文字,並回射給客戶。3 客戶從網路輸入讀入這行回射的文字,顯示在標準輸出上 標準輸入 fgets tcp 客戶 write read tcp 伺服器 標準輸出 fputs tcp 客戶 read write tcp ...