text 测试对SO_REUSEPORT的支持

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了text 测试对SO_REUSEPORT的支持相关的知识,希望对你有一定的参考价值。

// Simple program to test support of SO_REUSEPORT
// Adapted from https://blog.dubbelboer.com/2016/04/23/so-reuseport.html

#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>
#include <unistd.h>

int main() {
#ifdef SO_REUSEPORT
  int sock = socket(AF_INET, SOCK_STREAM, 0);
  int reuse = 1;
  int size = sizeof(reuse);
  if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, (void*)&reuse, size) < 0) {
    if (errno == EINVAL || errno == ENOPROTOOPT) {
      printf("SO_REUSEPORT is not supported by your kernel\n");
    } else {
      printf("unknown error\n");
    }
  } else {
    printf("SO_REUSEPORT is supported\n");
    if (getsockopt(sock, SOL_SOCKET, SO_REUSEPORT, (void*)&reuse, &size) < 0) {
      if(errno == ENOPROTOOPT) {
        printf("failed getsockopt: protocol not supported\n");
      } else {
        printf("unknown error\n");
      }
    } else {
      printf("getsockopt works: %d", reuse);
    }
  }
  close(sock);
#else
  printf("SO_REUSEPORT is not supported by your include files\n");
#endif
  return 0;
}
SO_REUSEPORT is supported
failed getsockopt: protocol not supported

以上是关于text 测试对SO_REUSEPORT的支持的主要内容,如果未能解决你的问题,请参考以下文章

可以在Unix域套接字上使用SO_REUSEPORT吗?

SO_REUSEADDR & SO_REUSEPORT

SO_REUSEADDR & SO_REUSEPORT

setsockopt() 的 macOS SO_REUSEPORT

Linux TCP套接字选项 之 SO_REUSEADDR && SO_REUSEPORT

剖析 TCP - SO_REUSEPORT 使用