Since your Q is a week old you probably have an answer, but: In step 4 you create the new socket (ns) at and it to s's accept queue. Place the init in the recv buffer of ns. Then wake any process in blocking wait on s. That way s is always in LISTEN state. On Thu, 2002-03-07 at 23:39, Marek Zawadzki wrote: > Hello, > > I've been trying to implement queuing and 'accept' in my protocol for few > weeks. > The way 'accept' should work is still not clear for me: > We have a socket s and we do the following in the server: > 1. listen(s) -- thus s->sk_state = TCP_LISTEN. > 2. accept(s) -- put a process into sleep. > ... > 3. receiving function gets an 'init' packet and looks for a socket which > matches packet's destination. The lookup returns s (!). > 4. I put s on a queue (sk->tp_pinfo.af_tcp.accept_queue) and wake up the > process (why to put s itself on it's own queue?). > 5. accept resumes, grabs first socket from the queue (s) and changes its' > state to TCP_ESTABLISHED and returns it to inet_accpet. (but this is the > same socket we've been listening on:( ). > 6. inet_accept grafts s into a new socket(ok), but s is now in > TCP_ESTABLISHED state, instead of TCP_LISTEN, which ruins next connection. > > How to keep the listening state and return the valid socket to > inet_accept, without messing with inet_accept itself? > My problem is the socket I am listening on and to which the 'init' packet > is destinated are the same. > > Thanks for anything. > -marek > > > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- _________________________________________________________________________ Terje Eggestad mailto:terje.eggestad@scali.no Scali Scalable Linux Systems http://www.scali.com Olaf Helsets Vei 6 tel: +47 22 62 89 61 (OFFICE) P.O.Box 150, Oppsal +47 975 31 574 (MOBILE) N-0619 Oslo fax: +47 22 62 89 51 NORWAY _________________________________________________________________________ -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/