~hiro-me262/pppc4win/trunk

« back to all changes in this revision

Viewing changes to src/system/osapi/win32/sysethtun.cc

  • Committer: hiro
  • Date: 2016-05-20 03:08:49 UTC
  • Revision ID: hiro_me262@msn.com-20160520030849-pjeuh66qt0os928q
set NDIS6 driver to default

Show diffs side-by-side

added added

removed removed

Lines of Context:
195
195
        HANDLE          mFile;
196
196
        unsigned char   mBuf[MAX_PACKET_SIZE];
197
197
        DWORD           mBuflen;
198
 
        OVERLAPPED      mOverlapped;
 
198
        OVERLAPPED      mOverlapped,mOverlapped2;
199
199
 
200
200
//sets the media status of the TAP device (cable connected or not)
201
201
bool tap_set_status(ULONG status)
260
260
        mOverlapped.Offset = 0;
261
261
        mOverlapped.OffsetHigh = 0;
262
262
        mOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
 
263
 
 
264
        mOverlapped2.Offset = 0;
 
265
        mOverlapped2.OffsetHigh = 0;
 
266
        mOverlapped2.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
263
267
        
264
268
        //check TAP driver version against our minimum supported version
265
269
        {
314
318
        printm("Closing TAP-WIN32 handle.\n");
315
319
        CloseHandle(mFile);
316
320
        mFile = INVALID_HANDLE_VALUE;
 
321
        SetEvent(mOverlapped.hEvent);
 
322
        CloseHandle(mOverlapped.hEvent);
 
323
        mOverlapped.hEvent = INVALID_HANDLE_VALUE;
 
324
        SetEvent(mOverlapped2.hEvent);
 
325
        CloseHandle(mOverlapped2.hEvent);
 
326
        mOverlapped2.hEvent = INVALID_HANDLE_VALUE;
317
327
        return 0;
318
328
}
319
329
 
359
369
{
360
370
        DWORD written;
361
371
        BOOL ret;
362
 
        OVERLAPPED wrov = {0};
363
 
        ret = WriteFile(mFile, buf, size, &written, &wrov);
 
372
        WaitForSingleObject(mOverlapped2.hEvent, 100);
 
373
        mOverlapped2.Offset = 0;
 
374
        mOverlapped2.OffsetHigh = 0;
 
375
        ResetEvent(mOverlapped2.hEvent);
 
376
        ret = WriteFile(mFile, buf, size, &written, &mOverlapped2);
364
377
        if (!ret) {
365
 
                char errmsg[ERRORMSG_SIZE];
366
 
                getErrorString(errmsg, sizeof errmsg, GetLastError());
367
 
                printm("Sending of %d bytes failed (%d bytes sent): %s\n", size, written, errmsg);
 
378
                DWORD e = GetLastError();
 
379
                if (e == ERROR_IO_PENDING) {
 
380
                        written=size;
 
381
                }
 
382
                else {
 
383
                        char errmsg[ERRORMSG_SIZE];
 
384
                        getErrorString(errmsg, sizeof errmsg, e);
 
385
                        printm("Sending of %d bytes failed (%d bytes sent): %s\n", size, written, errmsg);
 
386
                }
368
387
        }
369
388
        return written;
370
389
}