VirtualBox

Changeset 14188 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Nov 13, 2008 5:12:24 PM (16 years ago)
Author:
vboxsync
Message:

NAT: better error handling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r14183 r14188  
    200200{
    201201    int fNATfailed = 0;
    202 #if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    203     int i;
    204 #endif
    205202    PNATState pData = malloc(sizeof(NATState));
    206203    *ppData = pData;
     
    225222        WSAStartup(MAKEWORD(2,0), &Data);
    226223    }
    227 #ifdef VBOX_WITH_SIMPLEFIED_SLIRP_SYNC
     224#if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    228225        pData->phEvents[VBOX_SOCKET_EVENT_INDEX] = CreateEvent(NULL, FALSE, FALSE, NULL);
    229226#endif
     
    358355#if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    359356    int rc;
    360     /* Number of valid entries.
    361      * 1st event for drvNATSend() */
    362     int cElements;
     357    int error;
    363358#endif
    364359
     
    376371                               ((struct ipasfrag *)&ipq != u32_to_ptr(pData, ipq.next, struct ipasfrag *)));
    377372
    378 #if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    379                 /*
    380                  * Make this array static with a fixed maximum
    381                  * 1st event for drvNATSend()
    382                  */
    383                 cElements = 1;
    384 #endif
    385 
    386373                for (so = tcb.so_next; so != &tcb; so = so_next) {
    387374                        so_next = so->so_next;
     
    409396#else
    410397                                rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_OOB);
    411                                 AssertRelease(rc != SOCKET_ERROR);
     398                                if (rc == SOCKET_ERROR)
     399                                {
     400socket_error:
     401                                    error = WSAGetLastError();
     402                                    LogRel(("WSAEventSelector error %d (so=%x, socket=%s, event=%x)\n", error, so, so->s, VBOX_SOCKET_EVENT));
     403                                }
    412404#endif
    413405                                continue;
     
    423415#else
    424416                                rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_OOB);
    425                                 AssertRelease(rc != SOCKET_ERROR);
     417                                if (rc == SOCKET_ERROR)
     418                                    goto socket_error;
    426419#endif
    427420                                continue;
     
    438431#else
    439432                                rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_OOB);
    440                                 AssertRelease(rc != SOCKET_ERROR);
     433                                if (rc == SOCKET_ERROR)
     434                                    goto socket_error;
    441435                                continue; /*XXX: we're using the widest mask for event*/
    442436#endif
     
    454448#else
    455449                                rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_OOB|FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT);
    456                                 AssertRelease(rc != SOCKET_ERROR);
     450                                if (rc == SOCKET_ERROR)
     451                                    goto socket_error;
    457452                                continue; /*XXX: we're using the widest mask for event*/
    458453#endif
    459454                        }
    460455#if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    461                         WSAEventSelect(so->s, NULL, 0);
     456                        rc = WSAEventSelect(so->s, NULL, 0);
     457                        if (rc == SOCKET_ERROR)
     458                            goto socket_error;
    462459#endif
    463460                }
     
    496493#else
    497494                                rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT);
    498                                 AssertRelease(rc != SOCKET_ERROR);
     495                                if (rc == SOCKET_ERROR)
     496                                    goto socket_error;
    499497                                continue;
    500498#endif
    501499                        }
    502500#if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    503                         WSAEventSelect(so->s, NULL, 0);
     501                        else
     502                        {
     503                            rc = WSAEventSelect(so->s, NULL, 0);
     504                            if (rc != SOCKET_ERROR)
     505                                goto socket_error;
     506                        }
    504507#endif
    505508                }
     
    551554    int ret;
    552555#if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    553         WSANETWORKEVENTS NetworkEvents;                 
     556        WSANETWORKEVENTS NetworkEvents;
    554557        int rc;
     558        int error;
    555559        int timer_update = (readfds == NULL && writefds == NULL && xfds == NULL);
    556560#endif
     
    595599#if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    596600                        rc = WSAEnumNetworkEvents(so->s, VBOX_SOCKET_EVENT, &NetworkEvents);   
    597                         AssertRelease(rc != SOCKET_ERROR);
     601                        if (rc == SOCKET_ERROR)
     602                        {
     603                            error = WSAGetLastError();
     604                            LogRel(("WSAEnumNetworkEvents TCP error %d\n", error));
     605                            continue;
     606                        }
    598607#endif
    599608
     
    730739#if defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    731740                        rc = WSAEnumNetworkEvents(so->s, VBOX_SOCKET_EVENT, &NetworkEvents);   
    732                         AssertRelease(rc != SOCKET_ERROR);
     741                        if (rc == SOCKET_ERROR)
     742                        {
     743                            error = WSAGetLastError();
     744                            LogRel(("WSAEnumNetworkEvents TCP error %d\n", error));
     745                            continue;
     746                        }
    733747#endif
    734748#if !defined(VBOX_WITH_SIMPLEFIED_SLIRP_SYNC) || !defined(RT_OS_WINDOWS)
     
    919933HANDLE *slirp_get_events(PNATState pData)
    920934{
    921         return (pData->phEvents);
     935        return pData->phEvents;
    922936}
    923937void slirp_register_external_event(PNATState pData, HANDLE hEvent)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette