Changeset 8e3034d


Ignore:
Timestamp:
Aug 28, 2020, 2:17:36 PM (4 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
56c44dc
Parents:
d11d6eb
Message:

Every worker now does it's own accept.

Location:
benchmark/io/http
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • benchmark/io/http/main.cfa

    rd11d6eb r8e3034d  
    126126                                                workers[i].pipe[0] = fds[pipe_off + (i * 2) + 0];
    127127                                                workers[i].pipe[1] = fds[pipe_off + (i * 2) + 1];
     128                                                workers[i].sockfd  = server_fd;
     129                                                workers[i].addr    = (struct sockaddr *)&address;
     130                                                workers[i].addrlen = (socklen_t*)&addrlen;
     131                                                workers[i].flags   = 0;
    128132                                        }
    129133                                        unpark( workers[i] __cfaabi_dbg_ctx2 );
     
    131135                                printf("%d workers started on %d processors\n", options.clopts.nworkers, options.clopts.nprocs);
    132136                                {
    133                                         Acceptor acceptor = { server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen, 0 };
    134 
    135137                                        char buffer[128];
    136138                                        while(!feof(stdin)) {
     
    139141
    140142                                        printf("Shutting Down\n");
    141                                 }
    142                                 printf("Acceptor Closed\n");
    143 
    144                                 // Clean-up the workers
    145                                 for(options.clopts.nworkers) {
    146                                         put( wait_connect, -1 );
    147143                                }
    148144                        }
  • benchmark/io/http/worker.cfa

    rd11d6eb r8e3034d  
    2828        CONNECTION:
    2929        for() {
    30                 int fd = take(wait_connect);
    31                 if (fd < 0) break;
     30                int fd = cfa_accept4( this.[sockfd, addr, addrlen, flags], 0, -1`s, 0p, 0p );
     31                if(fd < 0) {
     32                        if( errno == ECONNABORTED ) break;
     33                        abort( "accept error: (%d) %s\n", (int)errno, strerror(errno) );
     34                }
    3235
    3336                printf("New connection %d, waiting for requests\n", fd);
     
    8285        }
    8386}
    84 
    85 //=============================================================================================
    86 // Acceptor Thread
    87 //=============================================================================================
    88 void ?{}( Acceptor & this, int sockfd, struct sockaddr * addr, socklen_t * addrlen, int flags ) {
    89         ((thread&)this){ "Acceptor Thread", *options.clopts.instance };
    90         this.sockfd  = sockfd;
    91         this.addr    = addr;
    92         this.addrlen = addrlen;
    93         this.flags   = flags;
    94 }
    95 
    96 void main( Acceptor & this ) {
    97         for() {
    98                 int ret = cfa_accept4( this.[sockfd, addr, addrlen, flags], 0, -1`s, 0p, 0p );
    99                 if(ret < 0) {
    100                         if( errno == ECONNABORTED ) break;
    101                         abort( "accept error: (%d) %s\n", (int)errno, strerror(errno) );
    102                 }
    103 
    104                 printf("New connection accepted\n");
    105                 put( wait_connect, ret );
    106         }
    107 }
  • benchmark/io/http/worker.hfa

    rd11d6eb r8e3034d  
    1717thread Worker {
    1818        int pipe[2];
    19 };
    20 void ?{}( Worker & this );
    21 void main( Worker & );
    22 
    23 //=============================================================================================
    24 // Acceptor Thread
    25 //=============================================================================================
    26 thread Acceptor {
    2719        int sockfd;
    2820        struct sockaddr * addr;
     
    3022        int flags;
    3123};
    32 
    33 void ?{}( Acceptor & this, int sockfd, struct sockaddr * addr, socklen_t * addrlen, int flags );
    34 void main( Acceptor & this );
     24void ?{}( Worker & this);
     25void main( Worker & );
Note: See TracChangeset for help on using the changeset viewer.