Tcp listener

Kostantinos Koukopoulos koukopoulos at gmail.com
Mon Feb 3 21:29:06 EET 2014


2014-02-03 xarman <manousidis.xar at gmail.com>:

> Χαιρετώ τη λίστα.
> Ενδιαφέρομαι στη κατασκευή ενός TCP Listener σε C/C++ σε Linux που να
> δέχεται πολλές συνδέσεις ταυτόχρονα. Έχω κάνει μία σχετική αναζήτηση στο
> Web και αν και είμαι γνώστης της γλώσσας C ως προς ένα βαθμό, έχω
> δυσκολευτεί να βρω κάποιο πρότυπο πρόγραμμα. Ουσιαστικά θα είναι ο
> listener ενός server που θα δέχεται ένα μήνυμα και θα το αποθηκεύει σε
> βάση και θα κάνει και κάποιες άλλες λειτουργίες. Γνωρίζω πως θα κάνω τις
> λειτουργίες αλλά ψάχνω ένα τρόπο να φτιάξω το βασικό σκελετό του
> listener που θα είναι πάντα ενεργός.
> Εάν έχετε κάποια γνώση πάνω στο θέμα ή έχετε ένα απλό παράδειγμα ή έστω
> κάποια παραπομπή, ώστε να το δουλέψω μετά εγώ, θα το εκτιμούσα.
>
>
δύο βασικές προσεγγίσεις υπάρχουν:

α) να υιοθετήσεις κάποιου είδους παραλληλισμό που προσφέρει το λειτουργικό
σύστημα, όπως threads ή forked processes (καλείς accept(2), το πρόγραμμα
μπλοκάρει μέχρι να έρθει μια σύνδεση, αναθέτεις σε ξεχωριστό thread/process
την διεκπεραίωση), και

β) να υιοθετήσεις ένα ασύγχρονο μοντέλο όπου οι ροές εκτέλεσης θα είναι
"συνεργάσιμες" και θα παραδίδουν τον έλεγχο αυτόβουλα για να προχωρήσει η
εκτέλεση των άλλων ροών (κάνεις επαναλαμβανόμενα select(2), poll(2) ή
epoll(4) και ενδιαμέσως διεκπεραιώνεις τμηματικά την δουλειά από τις
τρέχουσες συνδέσεις).

Εσύ έχεις κάποια από αυτές τις προσεγγίσεις κατά νου; Εάν όχι, ίσως θες να
διαβάσεις πρώτα λιγάκι για αυτές για να διαλέξεις την κατάλληλη.

Δες εδώ ένα παράδειγμα με epoll(4):

https://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/


-- 
|/ |/ Konstantinos <koukopoulos at gmail.com>
|\ |\ Koukopoulos <http://kouk.surukle.me>

VSRE messages are welcome*, Thanks!
* for more information see: http://vsre.info
<http://vsre.info/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.hellug.gr/pipermail/linux-greek-users/attachments/20140203/d3fad238/attachment.html>


More information about the Linux-greek-users mailing list