gpt4 book ai didi

iphone - iOS - Ping 超时

转载 作者:技术小花猫 更新时间:2023-10-29 11:01:31 33 4
gpt4 key购买 nike

我正在使用 Apple 的“Simple Ping”示例,它几乎具有我需要的所有功能,但我不知道在哪里可以设置每个数据包的超时。似乎这是不可能的,因为用于将数据写入套接字的函数没有任何超时参数。有没有人有想法更改此应用程序以获得像 Windows ping 命令中那样设置超时的能力?超时是指每个发送的数据包在等待响应时间过长后被丢弃的时间。

Windows ping 命令 - 我需要超时:

"-w Timeout:指定等待接收到对应于给定 Echo Request 消息的 Echo Reply 消息的时间量(以毫秒为单位)。如果在超时时间内未收到 Echo Reply 消息,显示“请求超时”错误消息。默认超时为 4000(4 秒)。”

我正在使用的简单 Ping 代码: http://developer.apple.com/library/mac/#samplecode/SimplePing/Introduction/Intro.html

最佳答案

苹果示例代码:

bytesSent = sendto(
CFSocketGetNative(self->_socket),
sock,
[packet bytes],
[packet length],
0,
(struct sockaddr *) [self.hostAddress bytes],
(socklen_t) [self.hostAddress length]
);

更改超时:

CFSocketNativeHandle sock = CFSocketGetNative(self->_socket);
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 100000; // 0.1 sec
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (void *)&tv, sizeof(tv));

bytesSent = sendto(
sock,
[packet bytes],
[packet length],
0,
(struct sockaddr *) [self.hostAddress bytes],
(socklen_t) [self.hostAddress length]
);

请参阅 Apple 文档:setsockopt

来自上面引用的文档:
SO_SNDTIMEO 是为输出操作设置超时值的选项。它接受一个 struct timbal 参数,其中包含用于限制等待输出操作完成的秒数和微秒数。如果发送操作阻塞了这么多时间,它会返回部分计数,或者如果没有发送数据则返回 EWOULDBLOCK 错误。在当前的实现中,每次向协议(protocol)传输额外数据时都会重新启动此计时器,这意味着该限制适用于从输出的低水位线到高水位线大小不等的输出部分。

关于iphone - iOS - Ping 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7437643/

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