There is an unsaved comment in progress. You will lose your changes if you continue. Are you sure you want to reopen the work item?
WinSock hooking and WSAGetLastError problem
I am trying to hook connect function ofWinSock 2 (ws2_32.dll) and I was successful, but there is a big problem here.
All modern browsers use not-blocking connections and when using connect function on a not-blocking connection, it will raise error 10035 mean that this operation can't complete immediately and you need to check later and see if we are connected or not. This
is a normal behavior and this error is not really an error. Something like an info or warning.
Most of browsers expect this error and if we don't have this error they will kill the connection. The problem is here that
WSAGetLastError is thread related so if you run connect function on an other thread you can't read related error. And it seems that EasyHook will run in an other thread separated from calling thread, so when I try to route this function by
calling original connect from my hook, any error generated is inaccessible for calling thread. (Only I can access it from hook, not application it-self)
So IE, Chrome and Firefox that expect error 10035 will face with error 0 (no error) because connection made in EasyHook thread not there, I don't know if EasyHook can solve this types of problems. Seems little hard to solve. What i think is, Is there any
way to run a block of code in calling thread (application it-self)?! So i can set error myself using
WSASetLastError on that thread?! This will force anyWSAGetLastError
call after that to return my last submitted error code.
Currently I can hook WSAGetLastError too, but this makes another problems because EasyHook's thread also have no access to calling thread's errors. Errors that may come from other methods (other than connect method). The only way I can think
of currently is to hook all ws2_32.dll methods which is hard.
Any help is appreciated