C++ IRC Socket Exception? To trådet

Tags:    c++

Hej allesammen!

Så er jeg tilbage med mine C++ problemer...

Jeg prøver at lave en (meget) simpelt IRC klient der nu både kan modtage og sende data. Derfor gør jeg brug af Mutex of tråde.

Problemet er at jeg modtager en Exception hver gang jeg kører min kode der siger "Der blev fors°gt (forsøgt) en handling pÕ (på) noget, som ikke er en socket."

I følgende kode:
Fold kodeboks ind/udKode 


Kan slet ikke fatte fejlen da jeg mener at jeg har taget højde for det hele?



Indlæg senest redigeret d. 06.02.2010 20:42 af Bruger #11328
8 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Prøv følgende constructor:

Fold kodeboks ind/udKode 


...bemærk '&' tegnet. Uden dét bliver det en ny kopi af objektet og default constructoren bliver kaldt.



Mange tak Robert! Ja, det hjalp gevaldigt! Kan nu modtage data. Problemet er dog at jeg ikke kan sende nu? Jeg kan skrive en streng én gang, men ellers så får jeg ikke chancen igen. Mit gæt er at den venter oppe ved min read funktion. Men ved ikke hvad jeg skal gøre ved det?

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 06.02.2010 20:42 af Bruger #11328
Du har låst din mutex.

Når du har sendt dine data låser du din mutex op, og så får læse tråden adgang og udfører følgende:
Fold kodeboks ind/udKode 


Så er mutexen låst, og tråden venter på data...som først kommer når du har sendt, og du kan ikke sende, fordi mutexen er låst.



Jamen problemet er så at når jeg skriver kan jeg ikke modtage data?? Egentlig burde det kun lige være selve "sendingen" af dataen der burde være Mutex låst.. Men ved ikke hvordan jeg skal implementere det?

I bund og grund er det vel det at "read" funktionen laver et kald til "waitForData()" indtil den modtager data.. Som så får låsen på read til at vare utroligt længe...



Jamen problemet er så at når jeg skriver kan jeg ikke modtage data?? Egentlig burde det kun lige være selve "sendingen" af dataen der burde være Mutex låst.. Men ved ikke hvordan jeg skal implementere det?

I bund og grund er det vel det at "read" funktionen laver et kald til "waitForData()" indtil den modtager data.. Som så får låsen på read til at vare utroligt længe...


Faktisk er der ikke noget problem i at have én tråd til at læse og én til at skrive til samme socket samtidig...uden mutex.

Men IRC er en lidt mere komplex protokol, hvor samme socket både kan sende svar på forespørgsler og notifikationer om events (chat, invitationer, osv) samtidig, så det er nok et helt anderledes design, du skal ud i.



En notifikation kan jo komme på helt tilfældige tidsspunkter. Men det var netop designet jeg ikke lige kunne finde en løsning på? Kan du evt. lave en skitse af en simpel program-design løsning?



En notifikation kan jo komme på helt tilfældige tidsspunkter. Men det var netop designet jeg ikke lige kunne finde en løsning på? Kan du evt. lave en skitse af en simpel program-design løsning?


Jeg kan godt tegne et diagram, som jeg ville lave det, men simpelt bliver det nok ikke.



:( Hele ideen var at det skulle være simpelt og så kunne jeg bygge videre på det...

Hvorfor bliver det ikke simpelt? (Er dog meget interesseret i dit diagram! (Er det UML?)



t