Changeset 51300 in vbox
- Timestamp:
- May 19, 2014 11:03:37 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 93772
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/NetworkServices/NAT/pxtcp.c
r49399 r51300 226 226 static int pxtcp_pmgr_pump(struct pollmgr_handler *, SOCKET, int); 227 227 228 /* get incoming traffic into ring buffer */ 228 229 static ssize_t pxtcp_sock_read(struct pxtcp *, int *); 230 static ssize_t pxtcp_sock_recv(struct pxtcp *, IOVEC *, size_t); /* default */ 229 231 230 232 /* convenience functions for poll manager callbacks */ … … 1770 1772 { 1771 1773 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; 1779 1775 ssize_t nread; 1780 1776 … … 1783 1779 1784 1780 *pstop = 0; 1785 1786 #ifndef RT_OS_WINDOWS1787 memset(&mh, 0, sizeof(mh));1788 mh.msg_iov = iov;1789 #endif1790 1781 1791 1782 beg = pxtcp->inbuf.vacant; … … 1828 1819 } 1829 1820 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); 1855 1826 1856 1827 if (nread > 0) { … … 1884 1855 } 1885 1856 } 1857 1858 1859 #if !defined(RT_OS_WINDOWS) 1860 static ssize_t 1861 pxtcp_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 */ 1876 static ssize_t 1877 pxtcp_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 */ 1886 1893 1887 1894
Note:
See TracChangeset
for help on using the changeset viewer.