我对Winsock编程有一个非常有趣的问题。说实话:我对此并不感到好笑。
我的目标是测试GBit网络的带宽。我使用嵌入式系统(包括GBit网络芯片)将带有GBit网卡(Windows 7 64位)的PC连接起来。
嵌入式系统作为UDP服务器工作(不要问我细节,它是FPGA编程的东西)。 从网站http://www.pcausa.com/Utilities/ttcpdown1.htm我下载了PCATTCP工具。
工具PCATTCP我使用以下选项运行它:
PCATTCP.exe -t -l 1178 -u -p XYZ -f m -s A.B.C.D <MyBinaryFile.bin
(在这种情况下,端口号XYZ和IP地址不重要) 结果是带宽约为150 Mbit / s。
在PC上安装了cygwin(64位)环境,其中包含工具ttcp。 所以我开始使用ttcp:
ttcp -t -l 1178 -u -p XYZ -f m A.B.C.D <MyBinaryFile.bin
这里我们有大约600 Mbit / s。 这真的是真的吗? Cygwin的ttcp比PCATTCP的纯winsock调用更快??? 为了确保这一点,我开始使用Wireshark。是的,Wireshark的时间栏告诉我,ttcp工具比PCATTCP更快。 此外,我使用以下选项运行ttcp:
ttcp -t -l 1178 –b 1178 -u -p XYZ -f m A.B.C.D <MyBinaryFile.bin
然后带宽几乎与PCATTCP(大约150 Mbit / s)相同。 'b'选项用于设置套接字缓冲区大小。但它对PCATTCP工具没有影响。
在这种情况下,我有以下问题: Cygwin如何沟通?它是否使用风向袋?
如果用PCATTCP工具更改套接字缓冲区大小,为什么不起作用?
有人对此案有任何建议吗?
问候,
托马斯
答案 0 :(得分:0)
所以,
我找到了一些信息,cygwin如何使用套接字:
https://cygwin.com/cygwin-ug-net/highlights.html
有这样的文字:
Cygwin中与Socket相关的调用基本上是在微软实施Berkeley套接字的Winsock中使用相同名称调用函数,但需要进行大量调整。所有套接字都是无阻塞的,可以通过POSIX信号中断阻塞调用。额外的簿记是实现正确的套接字共享POSIX语义所必需的,尤其是对于select调用。
这意味着方法“sendto(...)”在cygwin异步下并与PCATTCP同步。
如果你想要网络的最佳性能,你必须实现套接字异步; Boost :: Asio(http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio.html)包含这样的异步方法(例如“async_send_to”)。
不幸的是我无法弄清楚为什么用PCATTCP工具更改缓冲区套接字大小没有效果。
此致
托马斯