Κοίτα..ενώ καταλαβαίνω τι θες να μου πεις σε γενικές γραμμές δεν καταλαβαίνω τι θες να μου πεις ακριβώς. .κάπου το χάνω Δεν δίνουμε κάνα ραντεβού στο Πολυτεχνείο καλύτερα να σε ρωτήσω από κοντά?? Και ο καφές κερασμενος η ανοίγουμε κάνα μπουκάλι όλα πληρωμένα χαχαχα
χαχαχαχα ξεπουλάει το μαγαζί...
1.Ας πούμε ότι φτιάχνουμε μια λουπα που δημιουργεί threads και μέσα υπαρχει το connect και ένα thread που παίρνει σαν όρισμα τη συνάρτηση connection και κάνει connection..η λουπα διαρκεί μέχρι να γίνει connection με ανώτατο όριο όσος είναι και ο αριθμός των nodes αλλιώς επιστρέφει μήνυμα λαθους
2.Αντιστοιχα φτιαχνουμε μια λουπα για το listen όπου καλουμε τη συνάρτηση listening που φτιαξαμε μέσα στην οποία υπάρχει το listen() και το bind() από εντολες
3.Φτιαχνουμε όχι σε λουπα όμως αυτα δύο ξεχωριστά threads ένα για το server socket κι ένα για το client socket αντιστοιχα που παίρνουν σαν όρισμα
2 αντιστοιχες συναρτησεις που φτισξαμε για αυτό το σκοπό στις οποίες βαζουμε μέσα τις εντολές των sockets..
Κατά τα άλλα προφανώς βάζουμε και mutex cond κλπ για το κλείδωμα κλπ κοινών περιοχών μνήμης..
Είναι σωστή αυτή η υλοποιηση??Αν υποθέσουμε οτι βάζουμε μέσα ακριβώς ότι σου είπα από εντολες..
2.Αντιστοιχα φτιαχνουμε μια λουπα για το listen όπου καλουμε τη συνάρτηση listening που φτιαξαμε μέσα στην οποία υπάρχει το listen() και το bind() από εντολες
3.Φτιαχνουμε όχι σε λουπα όμως αυτα δύο ξεχωριστά threads ένα για το server socket κι ένα για το client socket αντιστοιχα που παίρνουν σαν όρισμα
2 αντιστοιχες συναρτησεις που φτισξαμε για αυτό το σκοπό στις οποίες βαζουμε μέσα τις εντολές των sockets..
Κατά τα άλλα προφανώς βάζουμε και mutex cond κλπ για το κλείδωμα κλπ κοινών περιοχών μνήμης..
Είναι σωστή αυτή η υλοποιηση??Αν υποθέσουμε οτι βάζουμε μέσα ακριβώς ότι σου είπα από εντολες..
Εδώ σ'εχασα λίγο...
Οποίον τρόπο και να διαλέξεις (εκτός αν δεν χρησιμοποίησεις καθόλου παράλληλο προγραμματισμό) θα χρειαστείς τουλάχιστον δυο threads: το server thread και το client thread.
- Το server thread θα κάνει bind() και θα ανοίξει ένα socket που θα κάνει listen(). Κάθε φορά που θα συνδέεται ένα νέο node μέσω του socket που κάνει listen(), θα δημιουργείται ένα νέο socket, θα το πω για ευκολία node socket.
- Το client thread θα λουπάρει τη λίστα με τις IP των nodes και θα προσπαθεί να κάνει connect() σε κάθε node που δεν είναι συνδεδεμένο με το δικό σου node (βλ. status στο προηγούμενο ποστ). Κάθε φορά που θα γίνεται επιτυχές connect() θα δημιουργείται ένα καινούργιο socket, επίσης node socket.
Απο εκεί και πέρα αυτό που έγραφα στο προηγούμενο ποστ είναι ότι ενδεικτικά μπορείς να κάνεις τις εξής υλοποιήσεις:
Α) να φτιάχνεις ένα καινούργιο thread για κάθε node socket, να κάνεις την ανταλλαγή μηνυμάτων και να το κλείνεις μετά
Β) να στέλνεις όλα τα node sockets σε ένα thread και να χρησιμοποιήσεις I/O multiplexing για να κάνεις την ανταλλαγή μηνυμάτων σε όλα μαζί απο το ίδιο thread.
Λέγωντας Ι/Ο multiplexing εννοώ select, poll ή epoll ή kqueue. Προτείνω select ή poll μιας και δεν παίζει με τίποτα να έχουμε πάνω απο 10 nodes ταυτόχρονα συνδεδεμένα οπότε δεν έχει νοήμα να μπλέξεις με τα τελευταία που είναι πιο περίπλοκα.
Αν πάλι δεν έγινα κατανοητός, γράψε μέχρι να το βρούμε