On Sat, Feb 02, 2013 at 12:46:20PM +0000, Blue Swirl wrote: > On Fri, Feb 1, 2013 at 1:53 PM, Stefan Hajnoczi <stefa...@redhat.com> wrote: > > Slirp uses rfds/wfds/xfds more extensively than other QEMU components. > > > > The rarely-used out-of-band TCP data feature is used. That means we > > need the full table of select(2) to g_poll(3) events: > > > > rfds -> G_IO_IN | G_IO_HUP | G_IO_ERR > > wfds -> G_IO_OUT | G_IO_ERR > > xfds -> G_IO_PRI > > > > I came up with this table by looking at Linux fs/select.c which maps > > select(2) to poll(2) internally. > > > > Another detail to watch out for are the global variables that reference > > rfds/wfds/xfds during slirp_select_poll(). sofcantrcvmore() and > > sofcantsendmore() use these globals to clear fd_set bits. When > > sofcantrcvmore() is called, the wfds bit is cleared so that the write > > handler will no longer be run for this iteration of the event loop. > > > > This actually seems buggy to me since TCP connections can be half-closed > > and we'd still want to handle data in half-duplex fashion. I think the > > real intention is to avoid running the read/write handler when the > > socket has been fully closed. This is indicated with the SS_NOFDREF > > state bit so we now check for it before invoking the TCP write handler. > > Note that UDP/ICMP code paths don't care because they are > > connectionless. > > > > Note that slirp/ has a lot of tabs and sometimes mixed tabs with spaces. > > I followed the style of the surrounding code. > > Nack for CODING_STYLE. Please either convert the functions affected to > spaces first (as you yourself proposed), or just ignore the > surrounding code and use spaces. Read my lips: no new tabses.
Given the project status of upstream slirp, I don't expect us to sync code changes much or at all. Therefore let's convert the file to QEMU coding style. Stefan