c - 内核土地套接字连接超时

标签 c linux sockets linux-kernel kernel-module

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

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);
}

调试输出(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

关于c - 内核土地套接字连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401418/

相关文章:

c - 使用 pthread_create 时出现问题

c - 结构体定义

linux - 如何将大型 OSM Postgresql 数据库从 VMWare Linux 迁移到 OSX 上的 Postgres.app?

mysql - Apache Solr 数据源配置错误

c - 无需等待接收整个文件即可发送文件

c - 在 Linux 中使用 C 的明文 POP3 客户端 - 向服务器发送命令后读取错误

python - python : input and output arrays 的 swig 类型映射

c - 为什么我的 C 程序不能运行?从文件中读取

linux - Linux 中的 VMX 测试中出现软锁定

c - 线程打开套接字