select geht nur im debug-modus

30/11/2010 - 11:18 von Curtis Newton | Report spam
Hallo,

ich will per UDP was empfangen. Dazu erstelle ich zuerst einen socket:

_socket=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

Danach sende ich was:

struct sockaddr_in to;
int toLen = sizeof(to);
memset(&to,0,toLen);

to.sin_family = AF_INET;
to.sin_port = htons(dstPort);
to.sin_addr.s_addr = inet_addr(dstIp);
s = sendto(_socket, buf, buf_len, 0,(sockaddr*)&to, toLen);

und teste, ob eine Antwort kommt (die kommt, per wireshark geschaut):

fd_set rset;
FD_ZERO(&rset);
FD_SET(_socket, &rset);

struct timeval timeout;
timeout.tv_sec = timeout_second;
timeout.tv_usec = timeout_usec;

int nRet = 0;

nRet=select(0, &rset, NULL, NULL, &timeout);

Problem ist, dass der Code im Debug-Modus geht (also select zeigt an,
dass da was ist), im Release-Modus aber nicht. Der Code ging, solange
ich Visual Studio unter WinXP verwendet habe. Jetzt benutze ich Win7/x64
(aber mit den gleichen Kompilersettings), und es geht nicht mehr.

Was kann das sein?
Bye
 

Lesen sie die antworten

#1 Curtis Newton
30/11/2010 - 17:14 | Warnen spam
Am Tue, 30 Nov 2010 11:18:59 +0100 schrieb Curtis Newton:

Problem ist, dass der Code im Debug-Modus geht (also select zeigt an,
dass da was ist), im Release-Modus aber nicht.



Firewall. Gemein.

Wenn man ein select macht, kommt keine Nachfrage von Windows, ob man das
Programm zulassen will. Select kommt einfach mit 0 zurück.

Fügt man das Programm aber in die Ausnahmeliste bei der Firewall ein,
kommt select schön mit 1 zurück.

Doof.
Bye

Ähnliche fragen