Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306808
  • 博文数量: 79
  • 博客积分: 1480
  • 博客等级: 上尉
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-11 15:29
文章分类

全部博文(79)

文章存档

2012年(1)

2011年(5)

2010年(19)

2009年(54)

我的朋友

分类: C/C++

2009-09-28 15:16:43

#include
#include
#include
#include
#include
#include
#include
#include

static struct socket *sock;
static struct work_struct work;
 
static int my_sendto(struct socket *sock, void * buff, size_t len, unsigned flags, struct sockaddr *addr, int addr_len)
{
     struct kvec vec;
     struct msghdr msg;
     vec.iov_base=buff; 
     vec.iov_len=len;
     memset(&msg, 0x00, sizeof(msg));
     msg.msg_name=addr;
     msg.msg_namelen=addr_len;
     msg.msg_flags = flags | MSG_DONTWAIT;
     return kernel_sendmsg(sock, &msg, &vec, 1, len);
}
 
static char buffer[128];
static void sendmsg(void *dummy)
{
     int n;
     struct sockaddr_in addr;
     memset(&addr, 0x00, sizeof(addr));
     addr.sin_family = AF_INET;
     addr.sin_port = htons(1000);
     addr.sin_addr.s_addr = in_aton("61.139.2.69");
     n = my_sendto(sock, buffer, 128, 0, (struct sockaddr *)&addr, sizeof(addr));
     printk("send %i bytes\n", n);
}
 
static int socket_init(void)
{
     INIT_WORK(&work, sendmsg, NULL);
     sock_create_kern(PF_INET, SOCK_DGRAM, 0, &sock);
     //不知加了GFP_ATOMIC,之后还会不会阻塞!!
     //sock->sk->sk_allocation = GFP_ATOMIC;
     schedule_delayed_work(&work, 2 * HZ);//两秒后sendmsg在kevent kernel thread中被调用
     return 0;
}
 
static void socket_exit(void)
{
     sock_release(sock);
}
 
module_init(socket_init);
module_exit(socket_exit);
阅读(1374) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~