select problem mit pipe &socket
-
ich will mit select eine pipe und ein socket gleichzeitig auf zu lesende daten überwachen, aber irgendwie spinnt das... fd_isset beim socket scheint dann immer gesetzt zu sein aber es ist nichts zu lesen da deshalb hängt das ganze dann ewig bei recv bis das programm etwas empfängt
FD_ZERO(&read); FD_SET(pipe, &read); FD_SET(socket, &read); select(0, &read, NULL, NULL, NULL); if (FD_ISSET(socket, &read)) { if((i=recv(socket, buffer, 499, 0)) == -1) { return -1; } buffer[i] = 0; } if(FD_ISSET(pipe, &fdread)) { ReadFile(pipe, buffer, 499, &br, 0); buffer[br] = 0; }
-
hilfe

-
was gibt den select(...) zurück?
if(FD_ISSET(pipe, &/*fd*/read)) //sicher so { ReadFile(pipe, buffer, 499, &br, 0); buffer[br] = 0; }select mit socket ist ok aber pipe??
bist du sicher das das geht??
-
ja das geht filedeskriptor ist filedeskriptor (oder :P)
-
ups select returned -1, daher is klar dass die gesetzt sind (shame on me)
aber das muss doch gehn ? ich brauch das so, gleichzeitig überprüfen wie soll ich das sonst lösen außer mit select
extra threads ist ja megaumständlich
-
socket mit WSAStartup geöffnet und ist filedeskriptor(en) gültig?
versuch es mal von den beiden filedeskriptor den grössten zu bestimmen
SOCKET s=max(pipe,socket); select(s+1, &read, NULL, NULL, NULL); // s+1 !!!
-
ja socket geöffnet usw
das s+1 ist ja nur für unix relevant, habs trotzdem ausprobiert klappt auch nicht.
wenn ich nur das socket reinadde klappt select, scheint irgendwie an der pipe zu liegen
-
denke ich auch pipe hat meiner ansicht nichts mit socket zu tun.
wo steht das, das es mit pipe geht?
was willst du eigendlich machen?
-
schaun ob auf dem socket oder der pipe was kommt und dann empfangen und verarbeiten
-
von pipe habe ich nicht so viel ahnung.
es wird in richtung overlapped und timeout gehen
schau mal http://www.codeproject.com/internet/cnamedpipe.asp
http://www.codeproject.com/threads/ipcworkshop.asp