- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下 C 程序,其主要函数 runTCPConnectivityCheck
打开一个 TCP 套接字,向它发送一个字节串并关闭它:
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
static int runTCPConnectivityCheck(const int port)
{
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0)
{
printf("socket failed\n");
return 1;
}
int reuseAddrTrue = 1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuseAddrTrue, sizeof(reuseAddrTrue)) != 0)
{
printf("setsockopt failed\n");
return 1;
}
struct sockaddr_in serv_addr = { 0 };
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) != 1)
{
printf("inet_pton failed\n");
return 1;
}
if (connect(fd, (struct sockaddr*)(&serv_addr), sizeof(serv_addr)) != 0)
{
printf("connect failed\n");
return 1;
}
const char* message = "hello";
const size_t messageLength = strlen(message);
if (send(fd, message, messageLength, 0) != messageLength)
{
printf("send failed\n");
return 1;
}
shutdown(fd, SHUT_RDWR);
close(fd);
return 0;
}
int main()
{
for (int i = 0; i < 10; ++i)
{
printf("%s\n", runTCPConnectivityCheck(5555) == 0 ? "success" : "failure");
//sleep(1);
}
}
如果我尝试重复测试同一个端口,第一次调用 runTCPConnectivityCheck
工作正常,但所有后续调用都会在调用 connect
时失败。如果我将调用添加到 sleep
中,那么它也可以工作。据推测,1 秒的延迟给了网络堆栈足够的时间来清理套接字,以便我可以再次连接到同一个端口。
首先:我是否正确关闭了 socket ?其次:如果我正确关闭它,确定网络堆栈何时准备好再次连接到同一主机和端口的标准方法是什么(而不是我目前使用的蹩脚 sleep
)?
更新
更多详细信息:connect
失败,错误代码为 61 或 ECONNREFUSED
,而 strerror
返回“Connection refused”。
本例中的服务器是在与测试程序相同的机器上循环运行的netstat
/nc
命令:
#!/bin/bash
while true; do
nc -l 5555
done
程序现在是真正的 C。
最佳答案
普遍的共识是客户端代码没有特别的错误。事实证明,我的测试服务器跟不上我的客户端:
#!/bin/bash
while true; do
nc -l 5555
done
我用 Python 编写了一个 fork 服务器,它能够毫无困难地为所有客户端连接提供服务。
关于c++ - 如何确定网络堆栈何时准备好再次打开到同一主机/端口的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48101329/
我想获取当前位置并将相机移动到当前位置,然后将当前位置 (LatLng) 保存到我的数据库 我获得了 ACCESS_FINE 权限并使用以下代码,但应用程序已停止工作 double lat = map
我想稍微优化一下这部分代码,以使用 $_SESSION['user']= $arr; 这样的数组。 // Store user db info in session for use $stmt = $
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我不确定 DaemonSet 中是否存在就绪条件。我的意思是,该 DaemonSet 拥有的所有 pod 都已准备就绪。 我知道 kubectl wait ,不过好像不能检查 DaemonSet 的准
我正在编写一个 JS 模块模式来测试代码并帮助我使用 JS Fiddle 理解该模式。我不明白的是,为什么第 25 行和第 26 行的“私有(private)方法”在通过 DOM 就绪引用时,其值为未
标题中有一个非常微妙的动画。当第一次加载页面,或者使用 cmd+shift+r (mac) 刷新以清除缓存时,jQuery 似乎并没有等待 DOM 准备好。它在所有正常的 html/css 弹出之前启
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我有两个问题: 我如何知道框架的内容已准备就绪/已加载(如 $(document.ready()))? 我如何知道弹出窗口 (window.open()) 内容已准备就绪/已加载(如 $(docume
只是想知道 document.ready 调用的数量是否会影响页面加载速度。Gulp/Grunt 有没有办法通过删除单独的文档就绪函数来丑化/缩小 JS? 最佳答案 检查一下! 我没有发现 Chrom
我有一个 的列表如下所示,它使用 Meteor.startup 填充了 find()。然后我得到这些 的所有数据属性使用 data() 并将其放入一个对象中并尝试返回/console.log 它以
我正在使用 trego 主题。作为主题选项,您可以设置和更改将出现在站点中的文本(例如“版权文本”和“ Logo url”的文本)。我如何使用 WPML 制作多语言版本?我想通过 wpml-confi
Zend_Service_Twitter 组件仍然适用于将于 2013 年 3 月 5 日弃用的 Twitters API v1.0。所以我想准备好我的新网站与 Twitter API 交互 v1.1
有没有一种优雅的方法来做到这一点?目前我只是使用自定义步骤 “并等待 10 秒”以绝对确定,有足够的时间让 iframe 做好准备。我不希望这个功能因为一个小的网络问题或 CPU 峰值而在我动力不足的
当我尝试在我的 VPS 上安装 Windows 时,我无法访问 Glish---图形网站控制台(但浏览器控制台可以工作)。 当我打开 Glish 控制台时,提示: novnc ready: nativ
生成新的全屏窗口时,相对于: sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) window = sdl2.ext.Window('win_name', (x_size, y_si
我刚刚为我的最新项目投入了 Umbraco ASP.NET CMS,我不确定这是否是全面的,但对于我的设置,Knockout.js 正在做所有的模板。 我不太热衷于 knockout.js,但到目前为
我是 jQuery 的新手,最近几天一直在尝试学习它。在我的办公室里,几乎没有经验丰富的 JavaScript 开发人员,他们主要使用 jQuery 来满足他们的所有需求,每当我找到他们并与他们交谈以
我目前正在编写一个脚本,我正在使用 while($IE.busy) {Start-Sleep 1} 等待页面准备就绪。 页面准备好后,我的脚本会填写并提交表单。我一直遇到问题,因为(我认为)IE 报告
这个问题已经有答案了: window.onload vs $(document).ready() (17 个回答) 已关闭 3 年前。 以下示例代码的执行顺序是什么?会$(window).on('lo
我是一名优秀的程序员,十分优秀!