Hmmm, mit sidste spørgsmål blev slettet, så jeg prøver igen :P
Jeg prøver at få et client server program op og køre I C++, det skal bare kunne komunikere vie nogle Linux servere... Jeg sidder nu fast I det jeg skal til at sende data tilbage til min client server... Så snart jeg smider den sidste read ind er der intet som virker længere... Det virker somom den sidste read nærmet forhindrer serveren i den anden ende fra at gøre hvad den skal.
Så jeg tænkte der må være en måde man kan lytte til sin socket uden at læse fra den, eller måske en anden måde at gøre det her på... Jeg er en smule I tvivl om der er gået kluder I mine socket descriptors og file descriptors efter jeg har forket processen, men der ser umidelbart ud til at virke fint intil jeg forsøger mig med den sidste read.
Så kort sagt, er der en måde jeg kan lytte til min SD uden at læse, eller en anden løsning måske ?
Jeg har forsøgt mig med det her nu : while(listen(sd, 1)<0){cout << "Nothings happening\n";}
Men så kommer den bare aldrig videre... Når den anden klasse laver en write på den Socket burde det da bryde løkken, men det sker aldrig... kan det være jeg har lavet kluder muder I mine SD's da jeg forkede processen ?
Det er nu et mærkeligt problem, selv når jeg bruger listen vil mit secundære server program slet ikke komme videre før jeg ligefrem dræber processen.... Mit problem er bare at det klart vil være mere fordelagtigt at kunne læse mens jeg stadig har en forbindelse mellem de 2, så jeg ikke skal til at implementere en client I min secundære server... Jeg får også at vide at det gerne skulle kunne lade sig gøre... men selv en listen() fryser mit secundære server program (Det hele ligger jo på 2 forskellige servere, så jeg burde slet ikke komme ud I at bruge metaforer, så det må vare den read/listen som skaber problemer)
Hvordan virker sådan en Non blocking read, det lyder meget som noget jeg kunne bruge her :P
Du skal nok være opmærksom på at den port din server lytter på ikke er den port din server og klient vil komme til at snakke på! Når din server står i "listen()" og din client laver en "connect()" skal du kalde "accept()" som bl.a returnerer en ny socket (port,IP og protocol) til at snakke på.
Sockets er på Linux som std. blocking så du skal (som Arne V siger) enten lave den unblocking, bruge select(), afbryde med et signal eller polle.
Arne_V hvis du lige skriver noget som svar så kan jeg acceptere det. Fandt ud af det godt nok ikke var det som var problemet, men svaret på spørgsmålet var jo korrekt :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.