问题标签 [getsockopt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
412 浏览

python - 在cherrypy中获取原始目标ip

我在cherrypy服务器上运行一个强制门户,我已经设置了iptables规则,将所有http流量从未注册的MAC地址重定向到门户。在用户通过门户启动页面向我注册后,我添加了一个 iptables 异常以让他们的流量通过。
现在我想要做的是将用户重定向到他们最初要去的页面 - 在他们被发送到门户之前。我知道 iptables 为所有 TCP 数据包设置了一个包含原始目标信息的字段,并且我知道有一个名为 getsockopt 的 C 函数来读取该字段。但是,我不知道如何访问与cherrypy 中的请求关联的套接字。

有人可以帮帮我吗?:)

0 投票
1 回答
1206 浏览

c - OSX 上的getsockopt 返回不正确的值?

我正在使用以下程序来调试更大的问题。

现在,如果我在 OSX 上运行相同的程序,getopt 永远不会返回 0 或 1,它总是返回我设置的 optval 的任何值!

在我的程序中一定有一些明显的错误正在逃避我。

示例 我已将该程序作为 ./a.out 64.233.160.105 运行

这是我正在使用的示例程序。

0 投票
0 回答
97 浏览

c++ - 如何在 solaris 10 中获取套接字状态?

如何在 solaris 10 中获取套接字状态?

在 solaris 8 中,socket.h 中曾经有 SO_STATE 宏,我们可以按如下方式使用它:

但是,solaris 10 中不支持这样的宏。那么,如何在 solaris 10 中实现呢?

0 投票
1 回答
4491 浏览

sockets - NGINX:超过 65535 个连接限制

与 HTTP 不同,websocket 在从 HTTP 升级后保持长期连接。

即使操作系统调整为使用所有端口,总共仍然只有 65536 个端口。NGINX 有可能超过这个限制吗?

一个潜在的解决方案是SO_REUSEPORT,但它缺少文件——至少我没有找到除了下面这段

NGINX 1.9.1 版引入了一项新功能,可以使用 SO_REUSEPORT 套接字选项,该选项可用于许多操作系统的较新版本,包括 DragonFly BSD 和 Linux(内核版本 3.9 及更高版本)。此套接字选项允许多个套接字侦听相同的 IP 地址和端口组合。然后内核负载平衡跨套接字的传入连接。

因此,NGINX 调用accept以接受入站连接。

accept() 系统调用与基于连接的套接字类型(SOCK_STREAM、SOCK_SEQPACKET)一起使用。它为侦听套接字提取挂起连接队列中的第一个连接请求,sockfd,创建一个新的连接套接字,并返回一个引用该套接字的新文件描述符。新创建的套接字不处于监听状态。原始套接字 sockfd 不受此调用的影响。

新的套接字会消耗端口吗?如果是,如何超过 65535 个连接限制?

0 投票
1 回答
1255 浏览

c - 设置 setsockopt 以检测 ip 选项

我想检测传入互联网数据包的 ip 选项。这是我的代码。

问题是标头长度为 6,但长度应为 20 以检测所有 ip 选项。在 setsockopt 中,启用变量的类型可能应该是 char,但我在运行程序时遇到了一些问题:事实上,使用 char 类型它会给我一个无效参数的错误。我还想知道如何使用getsockoption 打印这些选项。有什么问题?我希望我的问题很清楚:)

0 投票
1 回答
548 浏览

linux - struct“proto_ops”中的函数指针指向哪里?

在 Linux 内核中,我发现系统调用getsockoptfinally 调用sock->ops->getsockopt代码在这里)。并且sock->ops是一个名为proto_ops. 这个结构包含许多函数指针getsockopt,我想知道它指向哪里——我没有找到启动这个结构的地方。

我使用 IPv4 和 TCP 进行系统调用,它可能有一些特定的实现函数可以在这里调用。

任何见解都会非常有帮助。提前致谢!

0 投票
2 回答
312 浏览

sockets - 我可以找到正在处理我的套接字的网络接口/设备吗?

假设我有一个文件描述符socket(2),我已经connect(2)对它做了一个 - 以后有什么方法可以确定(从正在运行的程序内部)哪个网络设备可能正在用于底层传输?对 fd的调用stat(2)给出设备号 0;ioctl(2)getsockopt(2)选项似乎都不适用。

0 投票
1 回答
128 浏览

c - getsockopt 返回负 mss(在 CLion 上)

我遇到了一个问题,当我使用该函数getsockopt获取 MSS 时,我得到了一个负数(或 0)。但是功能是成功的,套接字是正确的值hSocketService是正确的并且可以工作。

所以我得到了:

这是代码:

谢谢

编辑

我忘了准确地说我正在使用带有 Clion 的 cygwin 在 Windows 上运行代码。

我更改了代码,现在tailleS是类型socklen_t,打印它的值和printf("Taille maximale d'un segment = %u\n", tailleS); 结果是Taille maximale d'un segment = 0

所以问题仍然是一样的,即使 getsockopt 正在工作,我也没有得到正确的值。

0 投票
1 回答
25107 浏览

tcp - 拨打 tcp 127.0.0.1:8500:getsockopt:consul 中的连接被拒绝

当我"consul members"在领事服务器和客户端上运行任何内容时出现此错误。端口处于 LISTENING 状态,我确保没有防火墙阻止。在领事客户端中运行相同时出现此错误:

检索成员时出错:获取http://127.0.0.1:8500/v1/agent/members :
dial tcp 127.0.0.1:8500: connectex: 由于目标机器主动拒绝,无法建立连接。

当我使用私有 IP 发出上述请求时,我得到了所需的输出。我可以在任何地方更改配置,以便它在专用 IP 上侦听请求吗?

0 投票
0 回答
47 浏览

redhat - 在第一次调用“无主机路由”后,getsockopt() 第二次如何反应?

我遇到了一些非常有趣的事情。寻求帮助。我有一个循环(30 次),在其中我调用 select() 来查找任何准备好写入的 fd。如果有,那么我调用 getsocktop(sfd, SOL_SOCKET, SO_ERROR, &ser, &serlen)。第一次通过循环 select() 返回一个“1”,所以我调用了 getsockopt(),它返回一个“没有到主机的路由”错误。然后我回到循环。我第二次调用 select() 时,它再次返回“1”,而这一次,当我调用 getsockopt() 时,它没有返回任何错误。这让我相信连接已经建立。但是当我在套接字 fd 上执行 getpeername() 时,它会返回一个“传输端点未连接”错误。

谁能告诉我为什么第二次调用 getsockopt() 时没有返回错误?

我在循环之前调用 connect(),它返回一个 EINPROGRESS,因为它是一个非阻塞套接字。

P:S - 当我在第一次调用 getsockopt() 时收到“连接被拒绝”错误时,也会发生同样的事情