gpt4 book ai didi

c - 如何在运行时检测 SO_REUSEPORT 可用性?

转载 作者:太空宇宙 更新时间:2023-11-04 07:21:22 26 4
gpt4 key购买 nike

例如 linux kernel-2.6.32-279 没有在/usr/include/asm-generic/socket.h 中定义 SO_REUSEPORT 但 kernel-2.6.32-431 定义它。

然后,如果我构建一些代码,例如:

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

int createsock()
{
int sock = socket(AF_INET, SOCK_DGRAM, 0);
#ifdef SO_REUSEPORT
int reuse = 1;
if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT,(const char*)&reuse, sizeof(reuse)) < 0)
{
close(sock);
return -1;
}
#endif
return sock;
}

使用 kernel-2.6.32-431 构建的可执行文件,它可以与 kernel-2.6.32-431 一起正常工作,但不能与 kernel-2.6.32-279 一起工作。如果它是使用 kernel-2.6.32-279 构建的,则它适用于两者。

此代码在构建时检测选项可用性,并且在运行时可能会有所不同。

有什么方法可以在运行时进行检测?

最佳答案

setsockopt调用失败,你查看errno看看出了什么问题。如果是 EINVALENOPROTOOPT 套接字选项无效,您可以继续其他操作。

如果您担心会发生什么事,请调用 getsockopt首先,如果失败,以同样的方式检查errno

关于c - 如何在运行时检测 SO_REUSEPORT 可用性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21454879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com