2η Προγραµµατιστική Εργασία

Σχετικά έγγραφα
1η Προγραµµατιστική Εργασία

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service)

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

HY-335a Project: microtcp *, μία lightweight TCP βιβλιοθήκη

ιαφάνειες παρουσίασης #5 (β)

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Ανάπτυξη και Σχεδίαση Λογισμικού

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

7.2 Τεχνολογία TCP/IP

Λειτουργικά Συστήματα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

Ζητήματα Σχεδίασης Λογισμικού Πελάτη

Ε-85: Ειδικά Θέµατα Λογισµικού

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ231: ομές εδομένων και Αλγόριθμοι

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων

Προγραµµατισµός ικτύων Ε-01

Προεπεξεργαστής C. Προγραμματισμός Ι 1

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

B. Ενσωμάτωση Ιθαγενών Μεθόδων

ιαφάνειες παρουσίασης #6 (β)

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Αποµακρυσµένη κλήση διαδικασιών

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

Ειδικά Θέματα Προγραμματισμού

Η γλώσσα προγραμματισμού C

(programming interfaceή/και application programming interface API).

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΑΣΚΗΣΗ 1. Structural Programming

Προγραμματισμός Ι (ΗΥ120)

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ

Αλγόριθμοι Ταξινόμησης Μέρος 1

ΤΕΧΝΟΛΟΓΙΑ ΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Περιεχόμενα. Πρόλογος... 21

Προγραμματισμό για ΗΜΥ

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Ανάπτυξη και Σχεδίαση Λογισμικού

ΠΜΣ 513 ΤΕΧΝΟΛΟΓΙΑ ΗΛΕΚΤΡΟΝ ΙΚΟΥ ΕΜΠΟΡΙΟΥ ΥΠΟΧΡΕΩΤΙΚΗ ΕΡΓΑΣΙΑ 2015

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΙΙ / ΕΠΑΛ(Α & Β ΟΜΑΔΑ) ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 11/12/2011 ΑΠΑΝΤΗΣΕΙΣ

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 7ο ΚΕΦΑΛΑΙΟ

ΠΛΗ111. Ανοιξη Μάθηµα 8 ο. Αναζήτηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Μεθόδων Επίλυσης Προβλημάτων

Αρχιτεκτονική πελάτη-εξυπηρέτη Οι διεργασίες που εκτελούνται στο δίκτυο είναι είτε πελάτες (clients) είτε εξυπηρέτες (servers). Εξυπηρέτης: παθητικός,

Δίκτυα Υπολογιστών ΙΙ (Ασκήσεις Πράξης)

$./MirrorInitiator -n <MirrorServerAddress> -p <MirrorServerPort> \\ -s <ContentServerAddress1:ContentServerPort1:dirorfile1:delay1, \\

3.2 Το αυτοδύναμο πακέτο IP (datagram) Δομή πακέτου

Μεθόδων Επίλυσης Προβλημάτων

50 Ketseo,Theoni Sarif,Omar 104

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Διδάσκων: Παναγιώτης Ανδρέου

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Προγραμματισμός Η/Υ (ΤΛ2007 )

Επικοινωνία με μηνύματα. Κατανεμημένα Συστήματα 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 2

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Transcript:

Προγραµµατισµός ικτύων (Ε-01) 2η Προγραµµατιστική Εργασία Επέκταση ϐασικής ϐιβλιοθήκης δικτυακού προγραµµατισµού και χρήση της για την υλοποίηση παράλληλου εξυπηρετητή πρωτοκόλλου µεταφοράς αρχείων ιδάσκων : Νικόλαος Ντάρµος Σχολή Πληροφορικής, Πανεπιστήµιο Ιωαννίνων Ιωάννινα, εκέµβριος 2010

1 Γενικά Η εργασία αυτή έχει ως στόχο την εισαγωγή των ϕοιτητών σε έννοιες δικτυακού προγραµµατισµού και στις επιπλοκές που εισαγάγουν ο ταυτοχρονισµός και τα UNIX σήµατα στη σχεδίαση και υλοποίηση δικτυακού λογισµικού. Βαρύτητα δίνεται και πάλι στη µεταφερσιµότητα του κώδικα και στη δυνατότητα λειτουργίας του σε διαφορετικά περιβάλλοντα (αρχιτεκτονικές, λειτουργικά συστήµατα, κτλ.) και µε διαφορετικά πρωτόκολλα (TCP, UDP), καθώς και στις διάφορες σχεδιαστικές επιλογές κατά την υλοποίηση της εργασίας µε στόχο την καλύτερη απόδοση του συστήµατος. 1.1 Παράδοση Ως καταληκτική ηµεροµηνία παράδοσης της εργασίας σας ορίζεται η Κυριακή, 6 Φεβρουα- ϱίου 2011 (23:59:59), ενώ η παράδοση ϑα είναι µέσω e-mail στο ntarmos@cs.uoi.gr. Οπως συζητήθηκε και στο πρώτο µάθηµα 1, ϑα πρέπει να παραδώσετε : 1. Τα αρχεία πηγαίου κώδικα. 2. Ενα απλό Makefile. 3. Αναφορά/σχολιασµό (σε µορφή txt/ps/pdf). Για οποιαδήποτε απορία ή πρόβληµα µπορείτε να επικοινωνείτε µαζί µου στο παραπάνω e-mail ή στο τηλέφωνο 2651008866 ή κατ ιδίαν τις ώρες γραφείου που έχουµε συζητήσει στο µάθηµα. Υπάρχει ακόµα και η δυνατότητα επικοινωνίας µέσω προγραµµάτων IM ϱωτήστε µε για λεπτοµέρειες. 2 Βασική ϐιβλιοθήκη Στην 1η εργασία υλοποιήσατε µία ϐασική προγραµµατιστική διεπαφή (API) συναρτήσεων δικτυακού προγραµµατισµού. Οι συναρτήσεις αυτές σκοπό έχουν να «κρύβουν» τις λεπτοµέρειες υλοποίησης και τις κλήσεις συστήµατος και να προσφέρουν στον χρήστη µία ενιαία πλατφόρµα ανάπτυξης εφαρµογών. Στα πλαίσια της δεύτερης προγραµµατιστικής εργασίας καλείσθε αρχικά να επεκτείνετε την υλοποίησή σας ώστε να υποστηρίζει : 1. χρήση πολλαπλών διευθύνσεων στα άκρα επικοινωνίας και, 2. παράλληλη εκτέλεση των συναρτήσεών σας (π.χ. από πολλαπλά νήµατα ή/και πολλαπλές διεργασίες). Το «ανανεωµένο» API ορίζει τις ίδιες συναρτήσεις για δηµιουργία, σύνδεση και καταστροφή άκρων επικοινωνίας, για αποδοχή αιτήσεων σύνδεσης, καθώς και για ανταλλαγή δεδοµένων, ενώ για την αποθήκευση και διαχείριση των πληροφοριών των sockets χρησιµοποιεί και πάλι την ίδια δική του δοµή δεδοµένων. Στο σχήµα 1 ϕαίνεται συνολικά το header file το οποίο ορίζει το API αυτό. Παρατηρήστε ότι, τουλάχιστον εξωτερικά, δεν υπάρχει κάποια διαφοροποίηση σε σχέση µε το API της 1ης εργασίας. 2.1 Υποστήριξη πολλαπλών διευθύνσεων στα άκρα επικοινωνίας Στο τµήµα αυτό ϑα πρέπει να αλλάξετε τον κώδικα των συναρτήσεων της ϐιβλιοθήκης σας έτσι ώστε να υποστηρίζει την ταυτόχρονη χρήση πολλαπλών διευθύνσεων στα άκρα επικοινωνίας. 1 http://www.cs.uoi.gr/~ntarmos/courses/networkprogramming/lectures/lecture01.pdf 1

Σχήµα 1: mynetlib.h 1 #ifndef MY_NET_LIB_H 2 #define MY_NET_LIB_H 3 4 typedef enum { 5 TCPEndpoint, // TCP endpoint. 6 UDPEndpoint, // UDP endpoint. 7 } EndpointType; 8 9 typedef struct { 10 EndpointType type; // Type of the endpoint. 11 int backlog; // For TCP/SCTP server sockets. 12 int* sd; // Table of socket descriptors. 13 int sdlen; // # elements in sd. 14 struct addrinfo* addr; // Info for the above descriptors. 15 } EndpointInfo; 16 17 int createserverendpoint(const char *host, const char *service, EndpointInfo *info); 18 int createclientendpoint(const char *host, const char *service, EndpointInfo *info); 19 int closeendpoint(endpointinfo *info); 20 int getnextclientfromendpoint(const EndpointInfo *serverinfo, EndpointInfo *clientinfo); 21 int senddatatoendpoint(const EndpointInfo *info, const void *data, size_t datalen); 22 int recvdatafromendpoint(const EndpointInfo *info, void *data, size_t datalen); 23 24 #endif Πιο συγκεκριµένα : createserverendpoint(...): Στην περίπτωση που ο κόµβος στον οποίο ϑα εκτελεστεί η συνάρτηση αυτή έχει παραπάνω από µία διευθύνσεις ή/και υποστηρίζει και IPv4 και IPv6, η συνάρτηση ϑα πρέπει να προσπαθεί να δηµιουργήσει όλα τα δυνατά άκρα επικοινωνίας. getnextclientfromendpoint(...): Οταν ο εξυπηρετητής έχει περισσότερα από ένα sockets στο ίδιο άκρο επικοινωνίας, η συνάρτηση ϑα πρέπει να επιλέγει κατάλληλα (π.χ. µε χρήση της συνάρτησης select(2)). 2.2 Υποστήριξη παράλληλης εκτέλεσης συναρτήσεων Στο τµήµα αυτό ϑα πρέπει να ελέγξετε και να τροποποιήσετε κατάλληλα τον κώδικά σας ώστε να επιτρέπει παράλληλη εκτέλεση των διάφορων συναρτήσεών σας από πολλαπλά νήµατα ή/και πολλαπλές διεργασίες. Ουσιαστικά αυτό έγκειται στη χρησιµοποίηση συναρτήσεων που είναι ασφαλείς για νήµατα (thread-safe) ή/και σήµατα (signal-safe) καθώς και στην αποφυγή χρήσης καθολικών και στατικών µεταβλητών. Συµβουλευτείτε τα man pages των συναρτήσεων ϐιβλιοθηκών που καλείτε στον κώδικά σας και των συναρτήσεων σηµάτων και νηµάτων. 2

3 Εφαρµογή µεταφοράς αρχείων Στο δεύτερο κοµµάτι της εργασίας αυτής σας Ϲητείται να τροποποιήσετε τον απλό πελάτη και τον εξυπηρετητή που υλοποιήσατε στην 1η προγραµµατιστική εργασία ώστε αυτοί να εκµεταλλεύονται την πρόσθετη λειτουργικότητα της «ανανεωµένης» ϐασικής ϐιβλιοθήκης. 3.1 Πρωτόκολλο µεταφοράς αρχείων Για καλύτερο έλεγχο, στην εργασία αυτή ϑα κάνετε κάποιες αλλαγές στο πρωτόκολλο µετα- ϕοράς αρχείων που προδιαγράφηκε στην πρώτη εργασία. Πιο αναλυτικά : Ο πελάτης upload, αφού ανοίξει το τοπικό αρχείο και συνδεθεί µε τον εξυπηρετητή, ϑα στέλνει την null-terminated ( \0 ) συµβολοσειρά «PUT filename», το µέγεθος του αρχείου σε bytes ως 64-bit ακέραιο (προσοχή µε το endianness!) και κατόπιν τα δεδοµένα του αρχείου στον εξυπηρετητή. Στο τέλος της µεταφοράς ο εξυπηρετητής ϑα πρέπει να επιστρέφει στον πελάτη, πάλι ως 64-bit ακέραιο, τον αριθµό των bytes που έγραψε στο αρχείο ή -1 για λάθος. Ο πελάτης download, αφού ανοίξει το τοπικό αρχείο και συνδεθεί µε τον εξυπηρετητή, ϑα στέλνει και πάλι µόνο την null-terminated συµβολοσειρά «GET filename» στον εξυπηρετητή. Η απάντηση του εξυπηρετητή ϑα αποτελείται από το µέγεθος του αρχείου σε bytes ως 64-bit ακέραιο (µε την «ειδική» τιµή -1 για λάθος στην πλευρά του εξυπηρετητή) και κατόπιν τα δεδοµένα του αρχείου. Φροντίστε οι πελάτες και ο εξυπηρετητής σας να µην µένουν µπλοκαρισµένοι για πάντα στην περίπτωση που από την εφαρµογή χρησιµοποιείται πρωτόκολλο UDP και κάποια δεδοµένα χαθούν. Επίσης προσέξτε ότι για τη σωστή λειτουργία του πελάτη και του εξυπηρετητή, ϑα πρέπει η µεταφορά των δεδοµένων να γίνεται σε δυαδική (binary) µορφή. 3.2 Υποστήριξη ταυτοχρονισµού για TCP εξυπηρετητές Στο τµήµα αυτό της εργασίας, καλείσθε να προσθέσετε στον εξυπηρετητή σας τη δυνατότητα ταυτόχρονης εξυπηρέτησης πολλαπλών πελατών πρωτοκόλλου TCP. Θα πρέπει να προτείνετε έναν σχεδιασµό τον οποίο εσείς ϑεωρείτε κατάλληλο για το έργο αυτό και στη συνέχεια να τον υλοποιήσετε. Στόχος είναι ένας εξυπηρετητής ο οποίος ϑα µπορεί να υποστηρίξει παράλληλα 10.000 πελάτες 2. Στην αναφορά σας ϑα πρέπει να εξηγήσετε την αρχιτεκτονική στην οποία καταλήξατε καθώς και τους λόγους που σας οδήγησαν σε αυτή την απόφαση. Για την επιλογή σας ϑα πρέπει να λάβετε υπόψιν σας (και να εξηγήσετε στην αναφορά σας), µεταξύ άλλων : Την ορθολογιστική λειτουργία του εξυπηρετητή σας. Τις απαιτήσεις που ϑα έχει η σχεδίασή σας από το λειτουργικό σύστηµα και το υλικό του κόµβου στον οποίο ϑα εκτελείται. Την πολυπλοκότητα υλοποίησης και αποσφαλµάτωσης/συντήρησης της σχεδίασής σας. Για την υλοποίηση του εξυπηρετητή σας ϑα πρέπει και πάλι να χρησιµοποιήσετε την ϐι- ϐλιοθήκη που υλοποιήσατε στο πρώτο µέρος της εργασίας σας. Είστε ελεύθεροι να παρέµβετε 2 http://www.kegel.com/c10k.html 3

στον κώδικά της αν ϑεωρείτε ότι απαιτείται, καθώς και να προσθέσετε κώδικα ο οποίος εξαρτάται από το λειτουργικό σύστηµα στο οποίο κάνετε την ανάπτυξη (αν για παράδειγµα ϑέλετε να χρησιµοποιήσετε κλήσεις συστήµατος που είναι διαθέσιµες µόνο σε Linux, BSD ή κάποιο άλλο λειτουργικό), αλλά ϑα πρέπει να το αναφέρετε και να εξηγήσετε την επιλογή σας στο πα- ϱαδοτέο. Σε κάθε περίπτωση, όµως, δεν πρέπει να αλλάξετε την προγραµµατιστική διεπαφή της ϐιβλιοθήκης µε άλλα λόγια, ϑα πρέπει ακόµα να µπορείτε υποθετικά να αντικαταστήσετε τα αρχεία της υλοποίησης της ϐιβλιοθήκης σας µε αυτά κάποιου συναδέλφου σας και ο κώδικας να συνεχίσει να λειτουργεί. 3.3 Υποστήριξη ταυτοχρονισµού για UDP εξυπηρετητές Στο τελευταίο τµήµα της εργασίας αυτής καλείσθε να προσθέσετε στον εξυπηρετητή σας υποστήριξη και για ταυτόχρονη εξυπηρέτηση πολλαπλών πελατών πρωτοκόλλου UDP. Οι απαιτήσεις είναι οι ίδιες µε αυτές του πρώτου τµήµατος. Προσέξτε ότι για την ορθή υποστήριξη του UDP µε πολλαπλούς παράλληλους πελάτες ενδεχοµένως να χρειασθεί επανασχεδιασµός των συναρτήσεων της ϐασικής σας ϐιβλιοθήκης ή του εξυπηρετητή σας. Το τµήµα αυτό είναι προαιρετικό και ϑα µετρήσει προσθετικά στη ϐαθµολογία σας, εφόσον υλοποιηθεί σωστά. 4