【发布时间】:2010-06-09 03:55:18
【问题描述】:
服务器:
vxworks 6.3
调用通常的socket,绑定,监听,然后:
for (;;)
{
client = accept(sfd,NULL,NULL);
// pass client to worker thread
}
客户:
.NET 2.0
TcpClient 构造函数连接到接受字符串主机名和 int 端口的服务器,例如:
TcpClient client = new TcpClient(server_ip, port);
当服务器在 windows (native c++) 中编译和执行时,这可以正常工作。
TcpClient 的构造函数会间歇性地返回实例,不会抛出任何异常,但 vxWorks 中的 accept 调用不会随客户端 fd 返回。 tcpstatShow 表示没有接受。
什么可能使 TcpClient 构造函数(调用“连接”)返回实例,而服务器上的接受调用不返回?它似乎与系统在后台执行的操作有关 - 当服务器忙于将数据持久保存到闪存或客户端尝试连接时的 NFS 共享时,似乎更有可能出现此症状,但当它发生时可能会发生也不是。
我已尝试调整运行接受线程的优先级
我在“听”中查看了队列的大小。够了。
可用的文件描述符总数应该足够了(虽然还没有验证这一点,早上第一件事)
【问题讨论】:
-
你弄清楚这里发生了什么吗?
-
不。 - 我有一个与 WindRiver(vxworks) 相关的支持请求。我做了wireshark跟踪,当它发生时,我看到了正确的SYN和SYN,ACK,所以windows做了正确的事情。不过,它从未在我们部署的目标上发生过,这可能是侥幸,这就是为什么我们已经使用它这么长时间了……之前的 IP 帧是之前数据流上的 RST、ACK - 也许这就是问题所在,在 vxworks 方面...端口 > 1000
-
当你使用无参数构造函数然后调用 Connect(addr, port)。有用吗?
标签: c# .net c#-2.0 tcp vxworks