please send a unified diff. i'll look at integrating your changes then!
tc On Sat, Dec 08, 2001 at 08:20:56PM -0500, benjamin yates wrote: > > hey all... i've been using the sockets extension pretty extensively for > the past couple months, and it has some real problems. obviously the best > reason for it is the ability to use non-blocking sockets in php, which is > great for writing simple tcpip clients and services. i've done this with a > set of state-machines and it works very well. > > i had to change the code alot though before i could make it all work, > because of two issues. > > first, the library tracks socket errors with 'errno' which isn't proper on > win32, where you must use WSAGetLastError() instead. that's a simple fix... > > the second has more changes. currently, the library stores the last error > only when socket calls return "error"-ish values. which is a problem > because the return value of the sockets calls is not what is returned to the > php script. this doesn't provide enough data for writing an app that uses > non-blocking sockets. > > example... socket_read() returns false if it didn't read anything. > > recv() returns the number of bytes read OR zero of the connection was > closed OR -1 if another error is in errno/WSAGetLastError. > > since socket_read only returns good or bad, you can't tell the specific > error without the socket_last_error being correct... > > i hope this makes sense to someone. the last time i built this and > patched it, i sent my changes from (at the time) the current CVS to the > authors in the sockets.c but never got any response - so now i'm posting it > here. > > i repatched the latest cvs snapshot, and i just tested it out on one of my > scripts and it's working fine for me. i don't know if it might break some > unix implementations - i think it will be fine. the code isn't the best, > because there are places where socket function calls are inside of if()'s, > and the last error must be stored, so instead of reorganize everything, i > just put multiple calls to my error storage macro where it was needed. i > don't know all the coding standards you go by so i didnt' want to spend time > making a bunch of changes that wouldn't be wanted. > > i zipped my sockets.c and the original, taken from the latest cvs > snapshot - it's available at > > http://www.newnetwork.com/benjamin_sockets.zip > > thanks for looking at it... > > oh and i don't know why someone decided that the socket_last_error() > should clear the error when calling it, i can't think of any reason why... > and it means that i have to store it before i use it in a script, if i must > make multiple references to it. not a big deal but i just can't come up > with why it should be cleared. > > well perhaps someone thought it should be cleared before i decided that it > should be set after every call :) > > -benjamin > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > To contact the list administrators, e-mail: [EMAIL PROTECTED] > -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]