VirtualBox

Changeset 51300 in vbox


Ignore:
Timestamp:
May 19, 2014 11:03:37 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
93772
Message:

pxtcp_sock_read: move code to do recvmsg/WSARecv to a separate function.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/NetworkServices/NAT/pxtcp.c

    r49399 r51300  
    226226static int pxtcp_pmgr_pump(struct pollmgr_handler *, SOCKET, int);
    227227
     228/* get incoming traffic into ring buffer */
    228229static ssize_t pxtcp_sock_read(struct pxtcp *, int *);
     230static ssize_t pxtcp_sock_recv(struct pxtcp *, IOVEC *, size_t); /* default */
    229231
    230232/* convenience functions for poll manager callbacks */
     
    17701772{
    17711773    IOVEC iov[2];
    1772 #ifndef RT_OS_WINDOWS
    1773     struct msghdr mh;
    1774 #else
    1775     DWORD dwFlags;
    1776     int rc;
    1777 #endif
    1778     int iovlen;
     1774    size_t iovlen;
    17791775    ssize_t nread;
    17801776
     
    17831779
    17841780    *pstop = 0;
    1785 
    1786 #ifndef RT_OS_WINDOWS
    1787     memset(&mh, 0, sizeof(mh));
    1788     mh.msg_iov = iov;
    1789 #endif
    17901781
    17911782    beg = pxtcp->inbuf.vacant;
     
    18281819    }
    18291820
    1830 #ifndef RT_OS_WINDOWS
    1831     mh.msg_iovlen = iovlen;
    1832     nread = recvmsg(pxtcp->sock, &mh, 0);
    1833 #else
    1834     dwFlags = 0;
    1835     /* We can't assign nread to -1 expecting, that we'll got it back in case of error,
    1836      * instead, WSARecv(,,,DWORD *,,,) will rewrite only half of the 64bit value.
    1837      */
    1838     nread = 0;
    1839     rc = WSARecv(pxtcp->sock, iov, iovlen, (DWORD *)&nread, &dwFlags, NULL, NULL);
    1840     if (rc == SOCKET_ERROR) {
    1841         warn("pxtcp_sock_read:WSARecv(%d) error:%d nread:%d\n",
    1842              pxtcp->sock,
    1843              WSAGetLastError(),
    1844              nread);
    1845         nread = -1;
    1846     }
    1847 
    1848     if (dwFlags) {
    1849         warn("pxtcp_sock_read:WSARecv(%d) dwFlags:%x nread:%d\n",
    1850              pxtcp->sock,
    1851              WSAGetLastError(),
    1852              nread);
    1853     }
    1854 #endif
     1821    /*
     1822     * TODO: This is where application-level proxy can hook into to
     1823     * process inbound traffic.
     1824     */
     1825    nread = pxtcp_sock_recv(pxtcp, iov, iovlen);
    18551826
    18561827    if (nread > 0) {
     
    18841855    }
    18851856}
     1857
     1858
     1859#if !defined(RT_OS_WINDOWS)
     1860static ssize_t
     1861pxtcp_sock_recv(struct pxtcp *pxtcp, IOVEC *iov, size_t iovlen)
     1862{
     1863    struct msghdr mh;
     1864    ssize_t nread;
     1865
     1866    memset(&mh, 0, sizeof(mh));
     1867
     1868    mh.msg_iov = iov;
     1869    mh.msg_iovlen = iovlen;
     1870
     1871    nread = recvmsg(pxtcp->sock, &mh, 0);
     1872
     1873    return nread;
     1874}
     1875#else /* RT_OS_WINDOWS */
     1876static ssize_t
     1877pxtcp_sock_recv(struct pxtcp *pxtcp, IOVEC *iov, size_t iovlen)
     1878{
     1879    DWORD flags;
     1880    DWORD nread;
     1881    int status;
     1882
     1883    flags = 0;
     1884    status = WSARecv(pxtcp->sock, iov, (DWORD)iovlen, &nread,
     1885                     &flags, NULL, NULL);
     1886    if (status == SOCKET_ERROR) {
     1887        nread = -1;
     1888    }
     1889
     1890    return (ssize_t)nread;
     1891}
     1892#endif /* RT_OS_WINDOWS */
    18861893
    18871894
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