内核地sockets连接超时

再次,我需要你的帮助,我的内核模块。 我已经实现了一个客户端模块,但每次连接函数返回errno = 110(超时)。 我不明白为什么? 为了testing这个模块,我在监听模式下启动了netcat(nc -vl -p4242)。 你对这个神秘的bug有什么build议吗?

int init_module(void) { struct socket* sock = NULL; struct sockaddr_in* dest = {0}; int retVal = 0; dest = (struct sockaddr_in*)kmalloc(sizeof(struct sockaddr_in), GFP_KERNEL); sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); dest->sin_family = AF_INET; dest->sin_addr.s_addr = htonl(in_aton("127.0.0.1")); dest->sin_port = htons(4242); printk(KERN_EMERG "Connect to %X:%u\n", dest->sin_addr.s_addr, 4242); retVal = sock->ops->connect(sock, (struct sockaddr*)dest, sizeof(struct sockaddr_in), !O_NONBLOCK); if (retVal >= 0) { printk(KERN_EMERG "Connected\n"); sock_release(sock); } else printk(KERN_EMERG "Error %d\n", -retVal); return (0); } 

debugging输出(dmesg)

 Message from syslogd@century at Sun Jun 19 08:41:33 2011 ... century kernel: Connect to 7F000001:4242 Message from syslogd@century at Sun Jun 19 08:41:54 2011 ... century kernel: Error 110 

错误代码110是“超时”。

in_aton("127.0.0.1"); 在网络字节顺序中已经给出了地址。

通过做htonl(in_aton("127.0.0.1")); 你实际上试图连接到1.0.0.127