[newbie]socket in kernel land

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

 



hello,

Since yesterday I have been trying  to make a kernel module
who use sockets. But I have got an error on my accept when
I made a telnet on localhost with the good port my computer
freeze :'(

this is my code :

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/kthread.h>
#include <linux/net.h>
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/byteorder/generic.h>
#include <asm-generic/fcntl.h>
#define NB_THREAD 1
#define SERVER_PORT 39237

struct socket   *mysock = NULL;
struct socket   *cli = NULL;

/*
** this  function create the socket bind and make one accept
*/
static int createmysock(void *data)
{
       struct sockaddr_in      serv;
       int     error;

       printk(KERN_INFO "I start the create socket\n");
       error = sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &mysock);
       if (error < 0)
       {
               printk(KERN_INFO "fail to make the socket\n");
               return -1;
       }
       serv.sin_family = AF_INET;
       serv.sin_addr.s_addr = INADDR_ANY;
       serv.sin_port = htons((unsigned int) SERVER_PORT);
       error = mysock->ops->bind(mysock, (struct sockaddr *)&serv,
sizeof(serv));
       if ( error < 0)
       {
               printk(KERN_INFO "tu fait de la merde syl\n");
               return -1;
       }
       printk(KERN_INFO "bind OK\n");
       error = mysock->ops->listen(mysock, 1);
       if ( error < 0)
       {
               printk(KERN_INFO "error\n");
               return -1;
       }
       printk(KERN_INFO "listen OK\n");
       cli = sock_create_lite(AF_INET, SOCK_STREAM, IPPROTO_TCP, &cli);
       printk(KERN_INFO "bug?\n");
       /*cli->ops = mysock->ops;*/  if i uncoment this line i have
got a kernel oops and i don t know why?
       printk(KERN_INFO "bug2?\n");
       error = mysock->ops->accept(mysock, cli, O_RDWR);
       if ( error < 0)
       {
               printk(KERN_INFO "error\n");
               return -1;
       }
       printk(KERN_INFO "Accept ok\n");
       printk(KERN_INFO "Socket creer\n");
       sock_release(cli);
       return 0;
}

int     init_module(void)
{
       int     i;
       struct  task_struct *myw;

       printk(KERN_INFO "hello world\n");
       for (i = 0; i < NB_THREAD; i++)
       {
               myw = kthread_create(createmysock, "yeah!!!!!!!!!!\n", "write");
               wake_up_process(myw);
       }
       return 0;
}

void    cleanup_module(void)
{
       sock_release(mysock);
       printk (KERN_INFO "Goodbye world\n");
       return ;
}


could you help me?
thanks and sorry for my english

--
syl@xxxxxxxx@gmail.com
-
To unsubscribe from this list: send the line "unsubscribe linux-newbie" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs

[Index of Archives]     [Audio]     [Hams]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Fedora Users]

  Powered by Linux