Changeset 7041 for trunk/src/wsock32


Ignore:
Timestamp:
Oct 13, 2001, 8:51:08 PM (24 years ago)
Author:
sandervl
Message:

several updates + fixes

Location:
trunk/src/wsock32
Files:
7 edited

Legend:

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

    r6253 r7041  
    1 /* $Id: asyncapi.cpp,v 1.15 2001-07-08 15:44:27 achimha Exp $ */
     1/* $Id: asyncapi.cpp,v 1.16 2001-10-13 18:51:07 sandervl Exp $ */
    22
    33/*
     
    415415    {
    416416        dprintf(("AsyncSelectNotifyEvent: notifying event semaphore, socket: 0x%x, HEVENT: 0x%x, event: 0x%x", pThreadParm->u.asyncselect.s, pThreadParm->notifyHandle, event));
     417        pThreadParm->u.asyncselect.lLastEvent |= event;
    417418        SetEvent(pThreadParm->notifyHandle);
    418419    }
     
    442443
    443444        //break if user cancelled request
    444         if(pThreadParm->u.asyncselect.lEvents == 0) {
     445        if(pThreadParm->u.asyncselect.lEvents == 0 || pThreadParm->fCancelled) {
    445446                break;
    446447        }
     
    700701   pThreadParm->u.asyncselect.lEvents        = lEventMask;
    701702   pThreadParm->u.asyncselect.lEventsPending = lEventMask;
     703   pThreadParm->u.asyncselect.lLastEvent     = 0;
    702704   pThreadParm->u.asyncselect.s              = s;
    703705   pThreadParm->u.asyncselect.asyncSem       = new VSemaphore;
     
    734736           lpEvent->iErrorCode[i] = 0;
    735737        }
    736 
    737         lpEvent->lNetworkEvents = pThreadInfo->u.asyncselect.lEventsPending;
    738 
    739         // TODO is this correct? API says they're cleared
    740         pThreadInfo->u.asyncselect.lEventsPending = 0;
    741    } else
     738        lpEvent->lNetworkEvents = InterlockedExchange((LPLONG)&pThreadInfo->u.asyncselect.lLastEvent, 0);
     739   }
     740   else
    742741   {
    743742      asyncThreadMutex.leave();
     
    747746      return SOCKET_ERROR;
    748747   }
     748   asyncThreadMutex.leave();
    749749
    750750   // reset event semaphore if present
     
    755755   }
    756756
    757    asyncThreadMutex.leave();
    758 
    759757   WSASetLastError(NO_ERROR);
    760758   return NO_ERROR;
  • trunk/src/wsock32/asyncthread.cpp

    r6201 r7041  
    1 /* $Id: asyncthread.cpp,v 1.11 2001-07-07 14:29:40 achimha Exp $ */
     1/* $Id: asyncthread.cpp,v 1.12 2001-10-13 18:51:07 sandervl Exp $ */
    22
    33/*
     
    4040////    WSASetBlocking(FALSE, pThreadParm->hThread);
    4141
     42  dprintf(("AsyncThread %x exit", pThreadParm->hAsyncTaskHandle));
    4243  free((PVOID)pThreadParm);
    4344}
     
    109110   memset(pThreadParm, 0, sizeof(*pThreadParm));
    110111   asyncThreadMutex.leave();
     112}
     113//******************************************************************************
     114//******************************************************************************
     115void WSACancelAllAsyncRequests()
     116{
     117 PASYNCTHREADPARM pThreadInfo;
     118 BOOL             found = FALSE;
     119
     120   dprintf(("WSACancelAllAsyncRequests"));
     121   asyncThreadMutex.enter();
     122   pThreadInfo = threadList;
     123
     124   while(pThreadInfo) {
     125        dprintf(("WSACancelAllAsyncRequests %x", pThreadInfo->hAsyncTaskHandle));
     126        pThreadInfo->fCancelled = TRUE;
     127        pThreadInfo->u.asyncselect.asyncSem->post();
     128        pThreadInfo = pThreadInfo->next;
     129   }
     130   asyncThreadMutex.leave();
     131   //TODO: not the right way to wait for the async threads to die
     132   DosSleep(250);
    111133}
    112134//******************************************************************************
  • trunk/src/wsock32/asyncthread.h

    r6201 r7041  
    1 /* $Id: asyncthread.h,v 1.7 2001-07-07 14:29:40 achimha Exp $ */
     1/* $Id: asyncthread.h,v 1.8 2001-10-13 18:51:07 sandervl Exp $ */
    22
    33/*
     
    7171                        DWORD       lEvents;
    7272                        DWORD       lEventsPending;
     73                        DWORD       lLastEvent;
    7374                        SOCKET      s;
    7475                        int         mode;
     
    8687void  EnableAsyncEvent(SOCKET s, ULONG flags);
    8788BOOL  QueryAsyncEvent(SOCKET s, HWND *pHwnd, int *pMsg, ULONG *plEvent);
    88 BOOL FindAndSetAsyncEvent(SOCKET s, int mode, int notifyHandle, int notifyData, ULONG lEventMask);
     89BOOL  FindAndSetAsyncEvent(SOCKET s, int mode, int notifyHandle, int notifyData, ULONG lEventMask);
     90
     91void  WSACancelAllAsyncRequests();
    8992
    9093#endif  //__ASYNCTHREAD_H__
  • trunk/src/wsock32/initwsock32.cpp

    r6639 r7041  
    1 /* $Id: initwsock32.cpp,v 1.3 2001-09-05 10:26:30 bird Exp $
     1/* $Id: initwsock32.cpp,v 1.4 2001-10-13 18:51:08 sandervl Exp $
    22 *
    33 * DLL entry point
     
    4646static HMODULE dllHandle = 0;
    4747
     48INT WIN32API WSACleanup();
     49//******************************************************************************
     50//******************************************************************************
     51BOOL WINAPI WinsockLibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
     52{
     53   switch (fdwReason)
     54   {
     55   case DLL_PROCESS_ATTACH:
     56    return TRUE;
     57
     58   case DLL_THREAD_ATTACH:
     59   case DLL_THREAD_DETACH:
     60    return TRUE;
     61
     62   case DLL_PROCESS_DETACH:
     63    WSACleanup();
     64    return TRUE;
     65   }
     66   return FALSE;
     67}
    4868/****************************************************************************/
    4969/* _DLL_InitTerm is the function that gets called by the operating system   */
     
    6989         ParseLogStatusWSOCK32();
    7090
    71      dllHandle = RegisterLxDll(hModule, NULL, (PVOID)&wsock32_PEResTab);
     91         dllHandle = RegisterLxDll(hModule, WinsockLibMain, (PVOID)&wsock32_PEResTab);
    7292         if(dllHandle == 0)
    73         return 0UL;
     93             return 0UL;
    7494
    7595         break;
    7696      case 1 :
    7797         if(dllHandle) {
    78         UnregisterLxDll(dllHandle);
     98             UnregisterLxDll(dllHandle);
    7999         }
    80100         break;
  • trunk/src/wsock32/wsa.cpp

    r3472 r7041  
    1 /* $Id: wsa.cpp,v 1.6 2000-05-02 13:09:43 bird Exp $ */
     1/* $Id: wsa.cpp,v 1.7 2001-10-13 18:51:08 sandervl Exp $ */
    22
    33/*
     
    9191        if( --num_startup > 0 ) return 0;
    9292
     93        WSACancelAllAsyncRequests();
    9394        winsockcleanupsockets();
    9495
     
    167168  int i = set->fd_count;
    168169
    169   while (i--)
    170       if (set->fd_array[i] == s) return 1;
     170  if(set) {
     171        while (i--) {
     172                if (set->fd_array[i] == s) return 1;
     173        }
     174  }
    171175
    172176  return 0;
  • trunk/src/wsock32/wsock2.cpp

    r6201 r7041  
    1 /* $Id: wsock2.cpp,v 1.2 2001-07-07 14:29:40 achimha Exp $ */
     1/* $Id: wsock2.cpp,v 1.3 2001-10-13 18:51:08 sandervl Exp $ */
    22
    33/*
     
    3636{
    3737// called too often in some apps, makes log file grow too fast
    38 //   dprintf(("WSAEnumNetworkEvents 0x%x 0x%x 0x%x NOT CORRECTLY IMPLEMENTED", s, hEvent, lpEvent));
     38   dprintf2(("WSAEnumNetworkEvents 0x%x 0x%x 0x%x NOT CORRECTLY IMPLEMENTED", s, hEvent, lpEvent));
    3939
    4040   if(!fWSAInitialized)
  • trunk/src/wsock32/wsock32.cpp

    r7022 r7041  
    1 /* $Id: wsock32.cpp,v 1.41 2001-10-11 19:24:07 sandervl Exp $ */
     1/* $Id: wsock32.cpp,v 1.42 2001-10-13 18:51:08 sandervl Exp $ */
    22
    33/*
     
    735735{
    736736   int ret;
     737   int optlen;
     738   int option;
    737739
    738740   if(!fWSAInitialized) {
     
    750752        return SOCKET_ERROR;
    751753   }
    752 //testestest
    753 #ifdef DEBUG
     754   optlen = sizeof(option);
     755   option = 0;
     756   ret = getsockopt(s, IPPROTO_IP, IP_HDRINCL_OS2, (char *)&option, &optlen);
     757   if(ret == 0 && option != FALSE) {
     758       *(u_short *)&buf[2] = len;
     759   }
    754760   dprintf(("sending to %s", inet_ntoa(((sockaddr_in*)to)->sin_addr)));
    755    for(int i=0;i<len;i++) {
    756        dprintf(("%02x: %x", i, buf[i]));
    757    }
    758 #endif
    759761   ret = sendto(s, (char *)buf, len, flags, (struct sockaddr *)to, tolen);
    760762
     
    764766   else WSASetLastError(NO_ERROR);
    765767
    766    //Reset FD_WRITE event flagfor WSAAsyncSelect thread if one was created for this socket
     768   //Reset FD_WRITE event flag for WSAAsyncSelect thread if one was created for this socket
    767769   EnableAsyncEvent(s, FD_WRITE);
    768770   return ret;
     
    13151317               }
    13161318               ret = getsockopt(s, IPPROTO_IP, IP_HDRINCL_OS2, (char *)optval, optlen);
     1319               if(ret == 0) {
     1320                   ret = (ret != FALSE) ? TRUE : FALSE;
     1321               }
    13171322               break;
    13181323
Note: See TracChangeset for help on using the changeset viewer.