2011-08-21 5 views
2

다음 코드가 항상 0을 반환하는 이유를 말해 줄 수 있습니다. 소켓 설명자 값은 3입니다. 열린 suse TFTP 서버를 사용하고 있습니다. 로컬 호스트의 포트 69에서 수신 대기 중입니다. 연결() 함수 반환 성공오류 : 소켓 선택() 함수는 항상 0을 반환합니다 ..?

.. 내가 패킷을 확인하시면 TCPdump를 사용하는 경우

connection_timer.tv_sec = 2; // s 
    connection_timer.tv_usec = 0; 

FD_ZERO(&fd_reader); 
    // laukiam, kol bus ka nuskaityti 
    FD_SET(socket_descriptor, &fd_reader); 

    int select_ready = select(socket_descriptor + 1, &fd_reader, NULL, NULL, &connection_timer); 

그것은 연결이 어딘가에 전에 폐쇄 된 승인이 수신 받게됩니다 후 첫 번째 패킷을 보내 ..

답변

1

UDP 소켓에서 connect()을 사용했기 때문에 사용자가 응답을받지 못하는 것으로 의심됩니다. UDP 소켓에서 연결된 대상의 데이터 그램 만 받아들이도록했습니다.

TFTP 응답이 포트 69에서 오는 것이 아니고 임시 포트에서 오는 것이므로 수신 확인이 절대로 수신되지 않습니다.

해결책 : 초기 연결이 끝날 때까지 connect() UDP 소켓을 사용하지 마십시오.

+0

고마워. thats mistake. .. 지금 코드는 잘 동작하고있다. – Balamurugan

2

당신을 리턴 코드 0select에서 얻습니다. 예를 들어, 타이머 (connection_timer)가 만료되어 설명자가 재미 있어야합니다.

그래서 오류가 아닙니다. 가장 가능성이 높은 connection_timer을 올바르게 초기화하지 않은 것으로 보입니다.

+0

나는 또한 연결 시간에 관한 세부 사항을 알려 주었다 .. – Balamurugan

1

WSAStartup 함수를 호출해야합니다. 동일한 문제가 있으며이 시작 기능을 호출 한 후에 해결되었습니다.

관련 문제