Ignore:
Timestamp:
Feb 23, 2002, 5:39:10 PM (24 years ago)
Author:
sandervl
Message:

Don't send FD_CONNECT for sockets that are returned by accept

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wsock32/asyncapi.cpp

    r7977 r7992  
    1 /* $Id: asyncapi.cpp,v 1.19 2002-02-20 15:07:13 sandervl Exp $ */
     1/* $Id: asyncapi.cpp,v 1.20 2002-02-23 16:39:09 sandervl Exp $ */
    22
    33/*
     
    531531        ret = select((int *)sockets, nr(noread), nr(nowrite), nr(noexcept), -1);
    532532        pThreadParm->fWaitSelect = FALSE;
     533
    533534        if(ret == SOCKET_ERROR) {
    534535                int selecterr = sock_errno();
     
    542543////                    state = ioctl(s, FIOBSTATUS, (char *)&tmp, sizeof(tmp));
    543544////                    dprintf(("SOCEINTR; state = %x", state));
    544                         goto asyncloopstart;    //so_cancel was called
     545                        goto asyncloopstart;    //so_cancel/closesocket was called
    545546
    546547                case SOCECONNRESET:
     
    574575                state = ioctl(s, FIOBSTATUS, (char *)&tmp, sizeof(tmp));
    575576
    576                 if(lEventsPending & FD_CONNECT) {
     577                //Don't send FD_CONNECT is socket was already connected (accept returns connected socket)
     578                if(!pThreadParm->fConnected && (lEventsPending & FD_CONNECT))
     579                {
    577580                        if(state & SS_ISCONNECTED) {
    578581                                AsyncSelectNotifyEvent(pThreadParm, FD_CONNECT, NO_ERROR);
     582                                pThreadParm->fConnected = TRUE;
    579583                        }
    580584                        else {
     
    594598                }
    595599        }
    596 
    597600        if(ready(noread))
    598601        {
    599602                state = ioctl(s, FIONREAD, (CHAR *) &bytesread, sizeof(bytesread));
     603                dprintf2(("state %x, bytesread %d", state, bytesread));
    600604                if(state == SOCKET_ERROR)
    601605                {
     
    769773        return SOCKET_ERROR;
    770774   }
     775
     776   int size, state, tmp;
     777   state = ioctl(s, FIOBSTATUS, (char *)&tmp, sizeof(tmp));
     778   dprintf(("QueueAsyncJob: state %x", state));
     779
     780   //Don't send FD_CONNECT is socket was already connected (accept returns connected socket)
     781   if(state & SS_ISCONNECTED) {
     782        pThreadParm->fConnected = TRUE;
     783   }
     784   else pThreadParm->fConnected = FALSE;
     785
    771786   if(QueueAsyncJob(WSAsyncSelectThreadProc, pThreadParm) == 0) {
    772787        delete pThreadParm->u.asyncselect.asyncSem;
Note: See TracChangeset for help on using the changeset viewer.