2012-02-27 3 views
0

Select()를 사용하여 소켓에서 읽을 수있는 데이터가 있는지 확인하는 데 문제가 있습니다. 연결하고자하는 소켓에 데이터가 없으므로 select에 대해 timeout 또는 0 값을 반환 할 것으로 기대합니다. 대신 -1 값을 얻었고 메시지는 "오류 : 오류 없음"입니다.Select()를 사용하여 "오류 없음"오류가 반환되었습니다.

나는이 예제와 매우 유사한 코드가 : 나는 몇 번 여기에 선택() 문서를 통해 읽었습니다 http://beej.us/guide/bgnet/output/html/multipage/selectman.html

: msdn.microsoft.com/en-us/library/windows/desktop/ms740141를 (v = vs.85) .aspx

모든 아이디어를 얻으실 수 있습니다. 감사!

구체적인 : C++, 윈 - XP, 마이크로 소프트 비주얼 C++ 2010

내 '최소한의'코드가 여기에 있습니다 : 당신은 당신이 실제로 만들 전에 FD_SET 구조 에 소켓을 추가http://pastebin.com/q9pZ33UK

+2

코드를 보지 않고도 무엇이 잘못되었는지 알 수있는 방법이 없습니다. –

+0

감사합니다. 이 게시물이나 다른 텍스트 호스팅 사이트에 전체 코드 컨텐츠를 넣어야합니까? 매우 길며 대부분의 코드는이 문제와 전혀 관련이 없습니다. – ProGirlXOXO

+0

문제를 재현하는 최소한의 코드를 만드십시오. 이것은 또한 문제의 근원을 파악할 수있는 가장 좋은 방법입니다. –

답변

3

소켓 : 따라서

FD_SET(s, &readfds); 
// (...) 
int iConnected = ConnectToHost(PortNum, IpAddy); 
//^ This actually calls: s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); 

, 당신은 FD_SET에 잘못된 소켓을 추가하고 있습니다. 이 작업을 수행하기 전에 소켓을 만드십시오.

int iConnected = ConnectToHost(PortNum, IpAddy); 
//(...) 
FD_SET(s, &readfds); 
+0

멋진 캐치. 멋진 글로벌 변수 :) –

+0

정말 고마워요! – ProGirlXOXO

관련 문제