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]