【发布时间】:2011-12-19 08:28:53
【问题描述】:
我有一个 C/S 程序。客户端使用套接字向服务器发送文件,在发送大约 700k 数据后,客户端(在 win7 上)将收到套接字 10054 错误,这意味着对等方重置连接。
服务器在 CentOS 5.4 上运行,客户端是运行在 virtual box 中的 windows7 虚拟机。客户端和服务器通过虚拟网络接口进行通信。 命令端口(发送日志)正常,但数据端口(发送文件)有问题。 如果它是由于套接字缓冲区大小配置错误或其他原因引起的? 如果有人可以帮我检查问题。谢谢。
每次我调用套接字发送一个缓冲区等于 4096 字节 发送(套接字,缓冲区,4096,0)
CentOS 套接字配置。
#sysctl -a
...
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_mem = 196608 262144 393216
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_ecn = 0
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_fack = 1
我不太明白socket缓冲区配置是什么意思,如果这样会导致接收不完整的结果问题?
【问题讨论】:
-
“连接被对端重置”最可能的原因是对方程序崩溃了。
-
@David Schwartz,服务器接缝正常,socket 没有关闭,最后,recv 超时错误。
-
接收超时? TCP 通常没有接收超时。那是你自己的代码吗?当您认为接收超时时,您会怎么做?您是否 100% 确定客户端在服务器接收超时之前 已通过对等方重置连接? (如果反过来,那就是代码中的错误。双方都在等待对方。)
标签: sockets windows-7 centos virtualbox