c++ - OpenVPN TAP I/O operations blocks forever -
c++ - OpenVPN TAP I/O operations blocks forever -
following code hangs forever when getoverlappedresult gets called, have not much experience in windows async io operations, implemented per understanding. have used access virtual network interface (by openvpn - tap/tun interface kernel driver installed properly).
i found place hangs, don't know reason why hangs ?
nread = 0; memset(data_buffer, '\0', nread); overlapped overlapped_read; memset(&overlapped_read, 0, sizeof(overlapped_read)); overlapped_read.offset = 0; overlapped_read.hevent = createevent(null, false, false, null); if ( readfile(fd, data_buffer, len, &nread, &overlapped_read) == false ) { if (getlasterror() != error_io_pending) { std::cerr << "readfile failed : " << getlasterror() << std::endl; homecoming false; } else { dword dwres = waitforsingleobject(overlapped_read.hevent, infinite); if(dwres == wait_object_0) { if (!getoverlappedresult(fd, &overlapped_read, &nread, false)) { std::cout << "getoverlappedresult failed : errorcode = " << getlasterror() << std::endl; closehandle(overlapped_read.hevent); homecoming false; } else { std:cout << "read successfull." << std::endl; } } else { std::cout << "waitforsingleobject failed : errorcode = " << getlasterror() << std::endl; closehandle(overlapped_read.hevent); homecoming false; } } std::cout << "bytes read = " << nread << std::endl; closehandle(overlapped_read.hevent); homecoming true; }
above code executed in infinite while loop within thread created using createthread api.
do have implemented async operation correctly ?
what possible cases when getoverlappedresult gets hangs ?
ps: few readfile calls successfull, can read ethernet frame successfully, hangs after approx. 15-20 calls.
c++ readfile msdn openvpn createthread
Comments
Post a Comment