Re: Accept -- still confused.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux