Changeset 118 in Main


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

use poll for select by default

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Server/http.c

    r104 r118  
    1919#include <winsock2.h>
    2020#else
     21#ifdef USE_POLL
     22#include <poll.h>
     23#else
    2124#include <sys/select.h>
     25#endif
    2226#endif
    2327
     
    4650        char cbuf[2];
    4751        int phase = 0;
     52
     53#ifdef USE_POLL
     54        struct pollfd pollfds[1];
     55        pollfds[0].fd = sock;
     56        pollfds[0].events = POLLIN | POLLPRI;
     57#else
    4858        fd_set fds;
     59#endif
    4960
    5061        bool bad = false;
     
    6475
    6576        while(1) {
     77#ifndef USE_POLL
    6678                FD_ZERO(&fds);
    6779                FD_SET(sock, &fds);
     
    6981                tv.tv_sec = 5;
    7082                tv.tv_usec = 0;
     83#endif
    7184#ifndef NO_SSL
    7285                if(ssl == NULL || !SSL_has_pending(ssl)) {
    7386#endif
     87#ifdef USE_POLL
     88                        int n = poll(pollfds, 1, 5000);
     89#else
    7490#ifdef __HAIKU__
    75                         int n = select(32, &fds, NULL, NULL, &tv);
     91                int n = select(32, &fds, NULL, NULL, &tv);
    7692#else
    7793                int n = select(FD_SETSIZE, &fds, NULL, NULL, &tv);
     94#endif
    7895#endif
    7996                        if(n <= 0) {
  • 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);
  • trunk/Server/tw_version.h

    r70 r118  
    44#define __TW_VERSION_H__
    55
    6 #define TW_VERSION "1.01\0"
     6#define TW_VERSION "1.02\0"
    77
    88const char* tw_get_version(void);
  • trunk/config.h.tmpl

    r79 r118  
    55
    66#undef NO_SSL
     7#define USE_POLL
    78
    89/* DO NOT EDIT BELOW THIS LINE */
     
    1213#endif
    1314
     15#if defined(__MINGW32__) && defined(USE_POLL)
     16#undef USE_POLL
     17/* Force select(2) for Windows */
     18#endif
     19
    1420#endif
    1521
Note: See TracChangeset for help on using the changeset viewer.