问题标签 [setsockopt]
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.
c++ - 来自 setsockopt 的错误 22 是什么?
我有以下代码返回错误号 22。我在任何地方都找不到 22 指的是什么,有人能指出我可能在哪里找到吗?
android - linux加入多播组setsockopt返回errno 19 device not found
我设置了一个 UDP 非阻塞套接字。我正在创建套接字,绑定它,并像这样加入一个多播组:
前 3 个 setsockopt 调用 - MULTICAST_TTL、MULTICAST-IF 和 REUSEADDRESS - 工作正常,并且绑定。然后,当我尝试加入多播组时,它返回 errno 19 - 未找到设备。将 imr 接口地址更改为 INADDR_ANY 意味着找到了设备,但程序不会接收数据包。我已经更改了地址,我知道它在多播范围内。我机器上的 eth0 启用了多播。我已经尝试使用struct ip_mreqn imr
并更改接口以适当地解决,没有变化。我运行了一个堆栈跟踪,但它没有更多信息,只是说 setsockopt 失败并出现 errno 19。
有没有人有任何想法?我在这里有点绝望,我已经在这方面太久了。
c - 如何使用 UDP_CORK 正确设置 UDP 套接字
我在 UDP 下创建了一个回显服务器,并且正在开发一个客户端,它将给定的文件拆分为数据包并将其传输到服务器,然后服务器返回数据包以由客户端重新组合。
发送单个数据包工作得很好。但是,我正在尝试使用 UDP_CORK 套接字选项在一个数据包中传输尽可能多的文件部分。我正在使用以下代码:
服务器表明它只接收一个“正常大小”的数据包,而不是我想要的软木化数据包。因此它只发回这个正常的数据包,由客户端通过 recvfrom() 调用接收。
我不确定我是否正确设置了 UDP_CORK。第二个论点正确吗?我不熟悉第二个选项的真正含义,因为手册页并不完全清楚。我也可能误解了软木塞的工作原理。
需要注意的几点:
- 我认为自己是一名中级程序员,但我几乎没有网络编程经验。
- 我意识到 UDP 不是传输文件的最佳方式。这最终将适应我正在帮助开发的不同协议。
谢谢!
sockets - 使用接口名称设置 IP_MULTICAST_IF 时 sendto 中的参数无效
我正在编写一个发送和接收多播数据包的小程序。我需要使用其名称(例如 eth0)而不是其地址来设置传出接口。因此我必须使用 struct ip_mreqn(而不是 struct in_addr),以便我可以使用它的 imr_ifindex 字段来设置接口索引(我可以使用接口的名称来获取)。
但是由于某种原因它不起作用。对 setsockopt() 的调用工作正常,但对 sendto() 的以下调用返回“无效参数”错误。当然,如果我用 in_addr 替换 ip_mreqn 并改用接口的地址,错误就会消失。
以下是我的代码:
设置 IP_MULTICAST_IF 时使用 struct ip_mreqn 有什么问题吗?有人知道吗?非常感谢帮助。谢谢。
请注意,目标端口和地址已经按网络字节顺序排列。
c - 在 C 中使用 setsockopt() 读取 ()
我正在尝试编写服务器客户端代码,但我被困在了一个点上。我希望客户端阅读一定的时间和超时。我尝试使用 setsockopt() 和 SO_RCVTIMEO 指定 timeval 结构中的时间,但我的 read() 不等待我在 timeval 结构中指定的时间。问题是,如果我只是在 setsockopt() 之后使用 read(),read() 正在等待指定的时间。如果我先调用 write() 然后 read(),read() 函数会立即超时,而无需等待 timeval 结构中给出的指定时间。我的代码如下所示:
//示例客户端代码
在我上面的代码中,我希望 read() 操作在 15 秒内超时。但它立即超时。我需要帮助!!!
linux - 在 Linux 上带有 UDP 套接字的 SO_REUSEADDR。有必要吗?
我的 UDP 套接字bind()
连接到端口 53 (DNS)。UDP 是否有TIME_WAIT
状态或SO_REUSEADDR
在 UDP 套接字上使用毫无意义?
linux - 在 Linux 上“接受”fd 上的 setsockopt
对于 SO_REUSEADDR 在 Linux 上的 setsockopt 行为,我有一个相当奇怪的观察。在一行中:如果我将 sockopt 应用于“侦听套接字”上的 accept 返回的 fd,则 socketoption 将反映在侦听套接字持有的端口上。
好的一些代码。
服务器:打开一个套接字,应用 SO_REUSEADDR 为真。接受一个连接,然后在接受返回的 fd 上的 fd 上应用 SO_REUSEADDR 为 false。
客户端:客户端连接到服务器,之后不做任何事情,确保服务器套接字保持在 TIME_WAIT 状态。
我所做的步骤重现了该问题。
- 运行服务器。
- 连接客户端。
- 杀死并重新启动服务器。服务器因绑定失败而失败
我在mac os上测试了这个。并且绑定没有失败。我已经挖掘了所有 Posix 规范,但没有一个说这段代码是未定义的。
问题:
在这方面有更多经验的人可以分享他们对这个问题的理解吗?
c - getsockopt 返回与 setsockopt 中的一组不同的 IP_TOS 值
我正在尝试使用setsockopt
将IPTOS
值设置为IPTOS_THROUGHPUT
. setsockopt
电话回来了0
。但是,getsockopt
显示IP_TOS
值设置为1
,与IPTOS_THROUGHPUT
( 0x8
) 不同。有谁知道是什么导致了and的IPTOS
价值不匹配?setsockopt
getsockopt
这是日志输出:
在套接字 26 上设置 DSCP 标记
套接字 26 到 8 上的 setsockopt 返回 0
插座 26 上的 DSCP 标记为 1,与预期的 8 不同
下面是代码:
c++ - setsockopt 错误 WSAEADDRNOTAVAIL
资源:
每次我在我的程序中运行它时,我都会得到:
10049 是 WSAEADDRNOTAVAIL 的错误代码,意思是“请求的地址在其上下文中无效”。
请帮忙,我不知道为什么我不断收到这个错误。
sockets - 如何在非阻塞套接字上设置发送超时?
我在理解 Linux 中套接字的工作时遇到了一些问题。
在上面的代码中,由于写入被缓冲,发送超时没有任何意义(当用户空间缓冲区被复制到内核缓冲区时,写入系统调用将立即返回)。发送缓冲区大小是更重要的参数,但发送超时似乎没有任何价值。但我肯定错了,因为我见过很多使用 SO_SNDTIMEO 的代码。假设接收器非常慢,如何使用 SO_SNDTIMEO 用户空间代码超时?