struct sock change in kernel 2.6

lijin liu llj098 at gmail.com
Wed Dec 22 19:18:06 EST 2010


Hi Bharath,all,

On Thu, Dec 23, 2010 at 12:31 AM, Bharath H S <bhslinker at gmail.com> wrote:
>
> Hi Lijin liu,
> There is sk_sleep function in include/net/sock.h line 1241 This might help.
> - Bharath H S
>
>
>
> On Wed, Dec 22, 2010 at 11:47 AM, lijin liu <llj098 at gmail.com> wrote:
>>
>> Hello everyone!
>>
>> I am trying to implement a simple tcp server in the kernel. I read the
>> ktcpvs's source code, but it works under kernel 2.4.
>>
>> The  struct sock changed in kernel 2.6, I have two questions about the struct:
>>
>> 1. Is sk_wq field in 2.6 equals to sk_sleep field in 2.4?
>> 2. How can I access the tcp accept queue in kernel 2.6? (In kernel
>> 2.4, we could use tp_pinfo.af_tcp.accept_queue, but it was removed in
>> 2.6)
>>
>>
>> PS: Should sk_receive_queue in the struct sock be used as
>> tp_pinfo.af_tcp.accept_queue?
>>
>> Thanks a lot!
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>


It seems that I found the answer.

After reading the source code, comparing the codes of the two versions
I got the answer:

1.We can use sk_wq->wait instead of sk_wait.
2.Use reqsk_queue_empty(struct request_sock_queue*) to check if there
is a new connection to accept. (thsi method is in net/request_sock.h)
we can use it like:

 	struct inet_connection_sock *isock = inet_csk(socket->sk);
	if(reqsk_queue_empty(&isock->icsk_accept_queue)){
                 //sleep here
        }

I test them in my code, works well.



More information about the Kernelnewbies mailing list