logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

file_peek and async_connect: msg#00028

Subject: file_peek and async_connect
I found some strange behaviour using async_connect when connecting to
unbound ports on localhost. The callback is never called. Try
something like this:
 
void cb(mixed ... args) {
        write("cb: %O\n", args);
}
 
int main () {
        object o = Stdio.File();
 
        o->async_connect("127.3.3.5", 3245, cb);
        return -1;
}
 
A reason I found for that (not sure if there are more issues, it fixes
this problem though) is that  
 
1) in __stdio_close_callback() read(0,1) is used to check if data can
be read from the socket instead of peek().
2) file_peek() does not check for POLLERR or POLLHUP and therefore
returns true even if the socket has been closed or some error occured
 
using peek() instead of read(0,1) in __stdio_close_callback() and
adding  
 
}else if (fds.revents & (POLLERR | POLLHUP)){                        
                                                                     
                                                                     
                           
        ret=0;                                                        
                                 
 
to file_peek() fixed this issue for me.  
 
The same problem may occur when using select() in file_peek(), I did
not test that though.  
 
arne



<Prev in Thread] Current Thread [Next in Thread>