Οι επιλογές υποδοχής οργανώνονται με *επίπεδα *και *ονόματα *. Το επίπεδο καθορίζει το στρώμα πρωτοκόλλου στο οποίο εφαρμόζεται η επιλογή, ενώ το όνομα προσδιορίζει τη συγκεκριμένη επιλογή εντός αυτού του επιπέδου. Τα κοινά επίπεδα περιλαμβάνουν:
* `sol_socket`: Αυτό το επίπεδο ισχύει για όλους τους τύπους υποδοχής. Οι επιλογές σε αυτό το επίπεδο επηρεάζουν τη γενική συμπεριφορά της υποδοχής. Παραδείγματα περιλαμβάνουν:
* `so_reuseaddr`: Επιτρέπει τη δέσμευση σε μια θύρα που βρίσκεται ήδη στην κατάσταση TIME_WAIT. Χρήσιμο για διακομιστές που πρέπει να επανεκκινήσουν γρήγορα.
* `so_reuseport`: Επιτρέπει σε πολλαπλές διαδικασίες να δεσμεύονται στην ίδια διεύθυνση και θύρα. Χρήσιμο για εξισορρόπηση φορτίου και ομαδοποίηση διακομιστών.
* `so_broadcast`: Επιτρέπει την αποστολή μηνυμάτων εκπομπής.
* `so_keepalive`: Επιτρέπει τους ανιχνευτές διατήρησης-alive για την ανίχνευση σπασμένων συνδέσεων.
* `so_linger`: Ελέγχει τον τρόπο συμπεριφοράς της υποδοχής όταν κλείσει. Επιτρέπει το χαριτωμένο κλείσιμο ή το άμεσο κλείσιμο.
* `so_sndbuf` και` so_rcvbuf`: Ρυθμίστε τα μεγέθη αποστολής και λήψη buffer, αντίστοιχα. Η προσαρμογή αυτών μπορεί να βελτιώσει την απόδοση.
* `so_error`: Ανακτά εκκρεμείς συνθήκες σφάλματος στην υποδοχή.
* `ipproto_ip`: Αυτό το επίπεδο ισχύει για τις υποδοχές IPv4. Οι επιλογές εδώ επηρεάζουν τον τρόπο με τον οποίο το στρώμα IP χειρίζεται τα πακέτα. Παραδείγματα περιλαμβάνουν:
* `ip_tos`: Ορίζει τον τύπο της υπηρεσίας (TOS) bits στην κεφαλίδα IP. Χρησιμοποιείται για τις εκτιμήσεις της ποιότητας των υπηρεσιών (QOS).
* `ip_ttl`: Ορίζει την τιμή που ζει (TTL), η οποία περιορίζει τη διάρκεια ζωής ενός πακέτου.
* `ipproto_ipv6`: Αυτό το επίπεδο είναι παρόμοιο με το `ipproto_ip` αλλά για τις υποδοχές IPv6. Πολλές επιλογές είναι ανάλογες με τους αντίστοιχους IPv4.
* `ipproto_tcp`: Αυτό το επίπεδο ισχύει για τις υποδοχές TCP. Επιλογές εδώ ελέγχουν τις συμπεριφορές ειδικών για TCP. Παραδείγματα περιλαμβάνουν:
* `tcp_nodelay`: Απενεργοποιεί τον αλγόριθμο Nagle, ο οποίος αποθηκεύει τα μικρά πακέτα πριν την αποστολή. Χρήσιμο για διαδραστικές εφαρμογές, αλλά μπορεί να μειώσει την αποτελεσματικότητα των μεταφορών χύδην.
* `ipproto_udp`: Αυτό το επίπεδο ισχύει για τις υποδοχές UDP. Οι επιλογές εδώ είναι σχετικά λίγες σε σύγκριση με το TCP.
Παράδειγμα (c):
Αυτό το παράδειγμα δείχνει πώς να ρυθμίσετε την επιλογή `so_reuseaddr` χρησιμοποιώντας το` setsockopt () `:
`` `c
#include
#include
#include
#include
#include
#include
#include
int main () {
int sockfd;
struct sockaddr_in serv_addr;
int opt =1; // για να ενεργοποιήσετε το SO_REUSEADDR
SOCKFD =υποδοχή (AF_INET, SOCK_STREAM, 0);
αν (sockfd <0) {
Perror ("Υποδοχή ανοίγματος σφάλματος");
έξοδος (1);
}
αν (setSockOpt (sockfd, sol_socket, so_reuseaddr, &opt, sizeof (opt)) <0) {
perror ("setsockopt απέτυχε")?
έξοδος (1);
}
// ... υπόλοιπο του κώδικα υποδοχής σας ...
Κλείσιμο (sockfd);
επιστροφή 0;
}
`` `
Αυτό το απόσπασμα κώδικα δημιουργεί μια υποδοχή TCP και ορίζει την επιλογή `so_reuseaddr`. Ο χειρισμός των σφαλμάτων περιλαμβάνεται για την εμφάνιση βέλτιστων πρακτικών. Θυμηθείτε να συμβουλευτείτε τις χειροκίνητες σελίδες του συστήματός σας (`Man 7 Socket ') για μια πλήρη λίστα διαθέσιμων επιλογών υποδοχής και τη χρήση τους. Η διαθεσιμότητα και η συμπεριφορά συγκεκριμένων επιλογών μπορεί να διαφέρουν ελαφρώς ανάλογα με το λειτουργικό σύστημα και την έκδοση του πυρήνα.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα