Winsock "Recv übergehen"?
-
ach danke für eure hilfe ^^
aber es is der client also bringt mir select() garnichts ... (oder?)ich versuchs nun mit ioctlsocket() ...
nun habe aber direkt ein problem ^^
wenn ich den non blocking mode anmache kann der client aufeinmal nicht mehr connecten ...
nun .. wo ist mein problem?
u_long sockmode = 1; ioctlsocket(sock, FIONBIO, &sockmode); // Verbinden memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(1234); addr.sin_addr.s_addr=inet_addr("127.0.0.1"); con=connect(sock,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(con==SOCKET_ERROR) { printf("Konnte nicht Connecten\n"); Sleep(1999); } else { printf("Connected\n"); }
danke lukas
-
Mit select() kannst Du natürlich auch den Socket des Client prüfen.
So zum Beispiel:
bool readable(SOCKET socket) { FD_SET fdSet; TIMEVAL timeout; timeout.tv_sec = 0; timeout.tv_usec = 0; long status; FD_ZERO(&fdSet); FD_SET(socket,&fdSet); status = select(0,&fdSet,0,0,&timeout); if (status <= 0) FD_ZERO(&fdSet); if (!FD_ISSET(socket,&fdSet)) return false; return true; } int main() { SOCKET s; // ... if (readable(s)) { //Daten sind vorhanden -> recv() } }
lg Max
PS:
Sry, hab nen Fehler beim timeout gemacht, ist jetzt korrigiert.
-
Du könntest einfach das ioctlsocket erst nach dem connect machen.
connect schlägt in deinem Beispiel fehl weil die Verbindung im Non-Blocking Mode im Hintergrund hergestellt wird. Mit select kannst du warten bis die Verbindung hergestellt wurde.