2012-07-27 2 views
0

요청이 교환 될 때마다 연결을 열고 닫을 TCP/IP 클라이언트/서버 연결을 설정했습니다. 완벽하게 작동합니다. 클라이언트 응용 프로그램은 연결을 열고 요청을 보내 기다립니다. 서버 응용 프로그램은 요청을 수신하면 응답을 생성하고 다시 전송하고 연결을 닫습니다. Cient 및 서버 응용 프로그램은 수 백 번 있습니다.TCP/IP 연결에서 소스 포트/IP 설정

이제 다음 단계로 이동하려고했습니다. 소스 IP 주소와 포트를 설정하십시오.

코드는 Linux와 Windows에서 모두 작동하기 때문에 SO_BINDTODEVICE는 문제가되지 않습니다. Linux/Unix에서만 지원되기 때문입니다.

원본 소켓과 ANYADRR을 클라이언트 소켓에 바인딩하려고했습니다. 그리고 그것은 ... 잠시 동안 작동합니다. 결국 그것은 오류 10038을 낳습니다. 인터넷을 통해 여러 기사를 읽었지만 명확한 대답이 없습니다 ... 소스 IP의 선택이 불분명합니다.

동일한 라이브러리 (비 연결 UDP 통신 모드), 발신자 및 수신자에 UNICAST 및 MULTICAST 모드가 있으며 멀티 캐스트 모드 인 유니 캐스트 I에서 소스 포트/IP를 설정할 수있었습니다 아직 시도하지 않았다.

어쨌든 누구든지 도움이 될만한 것을 아십니까? 나는 WinSock 2.2를 사용하고 있으며 가능한 한 플랫폼을 가리지 않도록 노력하고있다.

+0

왜 원본 포트를 제어해야합니까? 그것은 대개 아주 나쁜 생각입니다. – EJP

답변

0

Winsock 오류 10038WSAENOTSOCK입니다. 즉, 코드에 어딘가에 버그가 있음을 의미합니다. 유효한 소켓 객체를 가리 키지 않는 SOCKET 핸들을 사용하여 작업하려고합니다. 이는 bind() 함수 자체와 아무 관련이 없습니다. socket()에 전화하여 오류에 대한 결과를 확인하지 않았거나 이미 응용 프로그램에서 처리 한 SOCKET 핸들을 사용하려고하거나 SOCKET 핸들이 손상되어 메모리 오버플로가 있습니다.

관련 문제