- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
例如 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
看看出了什么问题。如果是 EINVAL
或 ENOPROTOOPT
套接字选项无效,您可以继续其他操作。
如果您担心会发生什么事,请调用 getsockopt
首先,如果失败,以同样的方式检查errno
。
关于c - 如何在运行时检测 SO_REUSEPORT 可用性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21454879/
我一直在为 Linux 开发多线程套接字服务器,我正在尝试不同的方法来多路复用 I/O,看看哪种方法效果最好。 我已经有了创建共享 epoll/套接字的代码 - 启用了 EPOLLONESHOT -
我正在使用 boost 库开发多进程套接字服务器。 每个进程运行一个 io_service . 我希望这个进程都在同一个端口上接受。 我知道 SO_REUSEPORT (在 linux 内核 3.9
我正在学习 SO_REUSEPORT 套接字选项,当我阅读“https://lwn.net/Articles/542629/”时,我对这句话感到困惑:“这简化了在客户端和服务器之间进行有状态对话的任务
我想知道标志 SO_REUSEPORT 的整数值。 在搜索时我找到了 here SO_REUSEPORT 已由值 0x0200 定义,这意味着 512,而在其他地方它是 SO_REUSEPORT 15
例如 linux kernel-2.6.32-279 没有在/usr/include/asm-generic/socket.h 中定义 SO_REUSEPORT 但 kernel-2.6.32-431
我想知道在 LINUX 2.6 中是否启用了 SO_REUSEPORT 选项?? 如果我尝试使用它并编译我的代码,我会收到以下错误 01.c:72: error: `SO_REUSEPORT' und
运行模拟器时出现以下错误,调试也不起作用,它说正在等待调试器附加。我想知道以下是否与陷入“等待调试器附加”有关。 Emulator: E0516 21:01:34.057349753 3279 soc
在旧版本的 Mac OS X 中,通配符绑定(bind)的工作方式如下所述: Socket options SO_REUSEADDR and SO_REUSEPORT, how do they dif
简而言之,SO_REUSEPORT 套接字选项允许在 ip:port 对上创建多个套接字。例如,program1和program2都可以调用函数链socket()->bind()->listen()-
在关于 SO_REUSEPORT 的讨论中,以下问题已发布到 reddit ,却无人接听。我想知道 Stack Overflow 是否知道答案。 Can anyone tell me how this
我有一个基于 libuv 的 C 语言 UDP 服务器,我们有一个: Main Thread:接收一个 UDP 数据包,将其排入 4 个队列之一,并调用对 4 个 worker 之一的出队回调。主线程
我已经阅读了 std::net 和 mio 的文档,并且发现了一些方法,例如 set_nodelay 和 set_keepalive,但我还没有找到在给定套接字上设置其他套接字选项(如 SO_REUS
Linux 内核 >= 3.9 允许通过设置 SO_REUSEPORT 在具有内核负载平衡的进程之间共享套接字:http://lwn.net/Articles/542629/ 这如何用于 AF_UNI
我的 Linux 应用程序需要以大约每秒 600,000 个数据包的速度接收一个包含中等大小数据包 (~1 KB) 的 UDP 流。我当前的实现是幼稚的:它有一个简单地调用 recv() 的线程。重复
我发现多个答案建议在多个 UDP 客户端需要监听同一端口上的广播时使用 SO_REUSEPORT 套接字选项。但是,我收到此选项不可用的错误消息。使用 python 2.7 from socket i
我对不使用 Elixir/Erlang 热升级的零停机部署系统感兴趣(由于代码运行时数据迁移的复杂性)。 我听说我可以在将服务器绑定(bind)到适配器时使用 SO_REUSEPORT 选项,这样我就
我正在学习套接字编程 tutorial出现了以下代码 // Forcefully attaching socket to the port 8080 setsockopt(server_fd, SOL
我正在编写一个多进程 UDP 服务器,它使用 SO_REUSEPORT 让多个工作进程监听同一个端口。 有没有办法告诉内核我希望根据数据包的源地址将数据包一致地传送到进程? (服务器需要根据源地址保存
考虑这段代码: #include #include #include #include #include #include #include #include #define SERV
我试图在 Ubuntu 20.04 上安装没有 Android Studio 的 SDK 和 Emulator。 但是被这个错误卡住了。 E0520 11:06:29.866803544 526
我是一名优秀的程序员,十分优秀!