나는 C/S 프로그램이 있습니다. 클라이언트가 소켓을 사용하여 서버에 파일을 보내면 대략 700k 데이터를 보내고 클라이언트 (win7)는 소켓 10054 오류를 수신합니다. 이는 연결 재설정을 의미합니다.소켓 오류 10054
Server는 CentOS 5.4에서 작동하며 클라이언트는 가상 박스에서 실행되는 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
불완전한 결과 문제가 발생할 경우 소켓 버퍼 구성이 의미하는 바를 잘 모르겠습니다.
"상대방에 의한 연결 재설정"의 가장 큰 원인은 다른 쪽 충돌하는 프로그램입니다. –
@David Schwartz, 서버 솔기가 정상이며 소켓이 닫히지 않았습니다. 마지막으로 recv 시간 초과 오류가 발생했습니다. –
* 수신 * 시간 초과? TCP는 일반적으로 수신 시간 초과가 없습니다. 그게 당신의 코드인가요? 수신 시간이 초과되었다고 생각하면 어떻게합니까?그리고 ** 서버가 수신 제한 시간을 갖기 전에 클라이언트가 ** 피어에 의한 연결 재설정을 확신했는지 100 % 확신합니까? (다른 방법이 있다면 코드의 버그입니다. 각 측은 다른 측을 기다리고 있습니다.) –