epoll+socket実現socket同時linuxサーバ(c)

2951 ワード

今回のソースコードはネット上で転載したもので、権利侵害があれば、本人に連絡してください.QQ:1031893464、直ちに削除します.
今回は勉強のため、他の人のコードを参考にして、次回は自分が書いたepoll同時サーバーを発表します.
/*     :  epoll,     socket
 *       ,       ,   epoll_event
 * xs
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MYPORT 12345

//     connect
#define MAX_EVENTS 500

//      
int currentClient = 0; 

//     buf
#define REVLEN 10
char recvBuf[REVLEN];


//epoll   
int epollfd;
//    
struct epoll_event eventList[MAX_EVENTS];

void AcceptConn(int srvfd);
void RecvData(int fd);

int main()
{
    int i, ret, sinSize;
    int recvLen = 0;
    fd_set readfds, writefds;
    int sockListen, sockSvr, sockMax;
    int timeout;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    
    //socket
    if((sockListen=socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        printf("socket error
"); return -1; } bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(MYPORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //bind if(bind(sockListen, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { printf("bind error
"); return -1; } //listen if(listen(sockListen, 5) < 0) { printf("listen error
"); return -1; } // epoll epollfd = epoll_create(MAX_EVENTS); struct epoll_event event; event.events = EPOLLIN|EPOLLET; event.data.fd = sockListen; //add Event if(epoll_ctl(epollfd, EPOLL_CTL_ADD, sockListen, &event) < 0) { printf("epoll add fail : fd = %d
", sockListen); return -1; } //epoll while(1) { timeout=3000; //epoll_wait int ret = epoll_wait(epollfd, eventList, MAX_EVENTS, timeout); if(ret < 0) { printf("epoll error
"); break; } else if(ret == 0) { printf("timeout ...
"); continue; } // , , poll int i = 0; for(i=0; i