乙個sample學會使用epoll

2021-07-14 23:25:30 字數 1786 閱讀 7369

#include #include #include #include #include #include #include #include #include #include #include #include #define max_event_number 1024

#define tcp_buffer_size 512

#define udp_buffer_size 1024

/*設定檔案描述符為非阻塞*/

int setnonblocking(int fd)

/*向epoll核心事件表中註冊檔案描述符事件*/

void epoll_addfd(int epollfd, int fd)

/*用ip位址和埠號建立socket位址*/

void create_sockaddr_in(const char* ip, int port, struct sockaddr_in* address)

int main(int argc, char **argv)

const char* ip = argv[1];

int port = atoi(argv[2]);

int ret = 0;

struct sockaddr_in address;

/*建立tcp socket,並將其繫結到埠port上*/

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

assert(listenfd >= 0);

create_sockaddr_in(ip, port, &address);

ret = bind(listenfd, (struct sockaddr*)&address, sizeof(address));

assert(ret != -1);

ret = listen(listenfd, 5);

assert(ret != -1);

/*建立udp socket,並將其繫結到埠port上*/

int udpfd = socket(pf_inet, sock_dgram, 0);

assert(udpfd >= 0);

create_sockaddr_in(ip, port, &address);

ret = bind(udpfd, (struct sockaddr*)&address, sizeof(address));

assert(ret != -1);

//udp不需要listen

struct epoll_event events[max_event_number];

int epollfd = epoll_create(5);

assert(epollfd != -1);

/*註冊tcp socket和udp socket上的可讀事件*/

epoll_addfd(epollfd, listenfd);

epoll_addfd(epollfd, udpfd);

while (1)

for (int i = 0; i < number; ++i)

else if (sockfd == udpfd)

}else if (events[i].events & epollin)//tcp連線fd有可讀事件

}else if (ret == 0) //對方關閉連線(收到rst報文)

else //成功讀到資料}}

else }}

close(listenfd);

return 0;

}

求職網元件研究 一學會使用

1.安裝sqlserver2005學習版後的問題 由於一開始不能選擇混合模式安裝,所有以下有兩部要設定修改的 1.安全性,登陸名,sa設定密碼 狀態 啟用登入 2.sqlserver配置管理器 sqlserver2005網路配置 sqlexpress的協議 啟用tcp ip 個性tcp ip屬性 i...

乙個demo學會c 程式設計

此demo主要包括三個檔案 namespace.h檔案,包含了自定義空間 空間函式 空間變數 空間自定義類 namespace.c檔案為namespace.h檔案中定義函式的實現 main.cpp檔案為主程式運算。namespace.h和namespace.cpp包含了自定義基 繼承類 模板類的定義...

學會如何帶領乙個團隊

提高班出去的每個人,將來都是要做管理者。公尺老師一句話,給了我們乙個很高的定位,那麼怎麼努力成為乙個管理者呢?怎麼能夠成為乙個優秀的管理者呢?最近帶領的團隊做了乙個小專案,雖然是小專案,沒有太多功能,但是麻雀雖小五臟俱全,邏輯上的複雜和使用的技術不比大專案差。隨著今天在客戶的伺服器上發布成功,廊坊一...