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