This is the mail archive of the cygwin-developers@cygwin.com mailing list for the Cygwin project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi, I've just applied a change of blocking socket read/write. The old implementation using overlapped I/O was apparently racy, see http://cygwin.com/ml/cygwin/2004-03/msg01446.html The problem is the need to call CancelIo if a signal arrived. The new implementation uses asynchronous I/O now. You can see the core of the new implementation in the wsock_event class in net.cc. Basically an event object is created and the approriate network events are selected for the event (wsock_event::prepare). Then the implementation differs, depending on being in a recv or send. In case of recvfrom and recvmsg, wsock_event::wait waits for a FD_CLOSE or FD_READ arriving. Since FD_CLOSE can arrive before all data has been read in case of asynchronous I/O, the close event sets a flag in fhandler_socket (2nd argument to wsock_event::wait), so that all remaining recv calls are executed w/o using async I/O. Analyzing the sendto and sendmsg cases is left as an exercise for the reader. It's all pretty straightforward. PLEASE give the new code a thorough test. I checked operation with ssh, scp, ftp and lynx so far but I'm of course not sure if I met all border conditions. Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Developer mailto:cygwin@cygwin.com Red Hat, Inc.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |