Как я могу удержать ядро ​​от отправки пакетов RST из сырых сокетов на Mac OS X? - PullRequest
2 голосов
/ 28 июня 2010

Я использую необработанные сокеты с 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);
}

Как мне заставить его остановиться? Нужно ли использовать этот код в том же процессе, в котором я использую необработанный сокет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...