PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Socket und threads



dakjo
08-05-2003, 19:36
Ich habe mir einen kleine Server geschreiben, der jede Clientverbindung im thread hält.

Nur kann ich im thread weder ein write noch read machen, der socket ich dabei global.





char buf[1024];
socket->read(buf,sizeof(buf));

cout << buf << endl;


Danke im voraus !

f0rtex
08-05-2003, 21:03
Unter *nix werden Concurrent-Server meistens mit Prozessen implementiert.

Hier der prinzipielle Aufbau


pid_t pid;
int listenfd, connfd;

listenfd = Socket(...);
Bind(listenfd, ...) ;
Listen(listenfd, LISTENQ);

for( ; ; ) {
connfd = Accept(listenfd, ...) ;

if((pid = fork()) == 0) {
Close(listenfd);
doit(connfd);
Close(connfd);
exit(0)
}

Close(connfd);
}


MfG
f0rtex

dakjo
08-05-2003, 21:25
Das das mit Fork gemacht wird ist mir schon klar.

Aber fork ist teuer, jedes mal wird der ganze Code im RAM kopiert.

Deshalb wollte ich das mit threads lösen.

Ausserdem habe ich interne Message Queues und so weiter die bei fork nich so einfach zu realisieren wären, glaube ich .

pik7
08-05-2003, 22:12
Aber fork ist teuer, jedes mal wird der ganze Code im RAM kopiert.


ist bei Threads genauso.(bei mir auf jeden fall)
Scheib mal was einfaches mit Threads und dann schauste mal mit top.

gruß

anda_skoa
08-05-2003, 22:17
Original geschrieben von pik7
ist bei Threads genauso.(bei mir auf jeden fall)
Scheib mal was einfaches mit Threads und dann schauste mal mit top.


Das zeigt nur Top falsch an.

Ein Thread hat nur einen eigenen Stack.

Ein Kind Prozess sein eigenes Datensegment.

Ciao,
_

dakjo
09-05-2003, 06:52
Nu ham wir uns ja geeinigt das ich das mit threads mach.

Hat denn nun jemand vielleicht ne Idee ?

anda_skoa
09-05-2003, 09:05
Original geschrieben von dakjo
Nur kann ich im thread weder ein write noch read machen, der socket ich dabei global.


Wenn du nur einen Socket hast, wofür brauchst du dann Threads?

Ciao,
_

dakjo
09-05-2003, 10:55
Mein gott nachher liegen die ganzen Socket in einem Array, und für jeden Socket gibt hat einen Thread.

Also brauch ich threads ..........

anda_skoa
09-05-2003, 13:39
Original geschrieben von dakjo
Mein gott nachher liegen die ganzen Socket in einem Array, und für jeden Socket gibt hat einen Thread.

Also brauch ich threads ..........

Ok, ok.

Hauptsache es greift immer nur ein Thread auf den Socket zu.

Nachdem das in deinem Code kein normaler C Socket ist, was für eine Klasse ist das?
Aus welcher Bibliothek?

Aus welcher Bibliothek sind die Threads?

Ciao,
_

dakjo
09-05-2003, 16:57
pthread und die socket von linuxgazette (http://www.linuxgazette.com/issue74/tougher.html)

anda_skoa
09-05-2003, 17:38
Original geschrieben von dakjo
pthread und die socket von linuxgazette (http://www.linuxgazette.com/issue74/tougher.html)

Vielleicht solltest du dann auch Methoden verwenden, die der Socket hat?

Gehen die Beispiele von der Seite?

Ciao,
_