代码之家  ›  专栏  ›  技术社区  ›  Adrian

如何防止内核从mac os x上的原始套接字发送RST数据包?

  •  2
  • Adrian  · 技术社区  · 14 年前

    我使用TCP的原始套接字。每当一个数据包被发送给我,我的计算机就会发送一个RST数据包回来。我试过了 http://udi.posterous.com/suppressing-tcp-rst-on-raw-sockets ,这不起作用:

    int main(void) {
      struct addrinfo *info, hints, *p;
      int status, sock;
    
      memset(&hints, 0, sizeof(hints));
      hints.ai_family = AF_UNSPEC;
      hints.ai_socktype = SOCK_STREAM;
      hints.ai_flags = AI_PASSIVE;
    
      status = getaddrinfo(NULL, "3000", &hints, &info);
      if (status != 0) function_error("getaddrinfo", 1);
    
      for (p = info; p; p = p->ai_next) {
        sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol);
        if (sock == -1) continue;
        if (bind(sock, p->ai_addr, p->ai_addrlen) == -1) continue;
        break;
      }
      if (p == NULL) {
        fprintf(stderr, "Can't connect. Error = %d\n", errno);
        return 2;
      }
      freeaddrinfo(info);
    
      if (listen(sock, 10) == -1)
        function_error("listen", 3);
    
      while (1) sleep(60);
    
      close(sock);
    
      return 0;
    }
    
    void function_error(char *func, int code) {
      fprintf(stderr, "%s error: %d\n", func, errno);
      exit(code);
    }
    

    我怎样才能让它停下来?我是否需要在使用原始套接字的过程中使用该代码?

    0 回复  |  直到 14 年前