Changeset 118 in Main for trunk/Server/server.c


Ignore:
Timestamp:
Sep 21, 2024, 6:03:27 PM (8 weeks ago)
Author:
Nishi
Message:

use poll for select by default

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Server/server.c

    r117 r118  
    3939#include "strptime.h"
    4040#else
     41#ifdef USE_POLL
     42#include <poll.h>
     43#else
    4144#include <sys/select.h>
     45#endif
    4246#include <sys/socket.h>
    4347#include <arpa/inet.h>
     
    5458extern char tw_server[];
    5559
    56 fd_set fdset;
    5760int sockcount = 0;
    5861
     
    802805
    803806void tw_server_loop(void) {
    804         struct timeval tv;
    805807        int i;
    806808#if defined(__MINGW32__) || defined(__HAIKU__)
     
    810812        }
    811813#endif
     814#ifdef USE_POLL
     815        struct pollfd pollfds[sockcount];
     816        for(i = 0; i < sockcount; i++) {
     817                pollfds[i].fd = sockets[i];
     818                pollfds[i].events = POLLIN | POLLPRI;
     819        }
     820#else
     821                fd_set fdset;
     822                struct timeval tv;
     823#endif
    812824        while(1) {
    813                 FD_ZERO(&fdset);
    814                 for(i = 0; i < sockcount; i++) {
    815                         FD_SET(sockets[i], &fdset);
    816                 }
    817                 tv.tv_sec = 1;
    818                 tv.tv_usec = 0;
     825#ifdef USE_POLL
     826                int ret = poll(pollfds, sockcount, 1000);
     827#else
     828                        FD_ZERO(&fdset);
     829                        for(i = 0; i < sockcount; i++) {
     830                                FD_SET(sockets[i], &fdset);
     831                        }
     832                        tv.tv_sec = 1;
     833                        tv.tv_usec = 0;
    819834#ifdef __HAIKU__
    820                 int ret = select(32, &fdset, NULL, NULL, &tv);
     835                        int ret = select(32, &fdset, NULL, NULL, &tv);
    821836#else
    822837                        int ret = select(FD_SETSIZE, &fdset, NULL, NULL, &tv);
     838#endif
    823839#endif
    824840                if(ret == -1) {
     
    837853                        int i;
    838854                        for(i = 0; i < sockcount; i++) {
    839                                 if(FD_ISSET(sockets[i], &fdset)) {
     855                                bool cond;
     856#ifdef USE_POLL
     857                                cond = pollfds[i].revents & POLLIN;
     858#else
     859                                        cond = FD_ISSET(sockets[i], &fdset);
     860#endif
     861                                if(cond) {
    840862                                        SOCKADDR claddr;
    841863                                        int clen = sizeof(claddr);
Note: See TracChangeset for help on using the changeset viewer.