Comment laisser le noyau choisir un numéro de port dans la plage (1024,5000) en programmation de socket TCP
Lorsque j'exécute le code suivant:
struct sockaddr_in sin;
int addrlen;
addrlen=sizeof(sin);
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr=inet_addr("123.456.789.112");
sin.sin_port=htons(0); //so that the kernel reserves a unique port for us
sd_server = socket(PF_INET, SOCK_STREAM, 0);
bind(sd_server, (struct sockaddr *) &sin, sizeof(sin));
getsockname(sd_server,(struct sockaddr*)&sin,&addrlen);
port=ntohs(sin.sin_port);
printf("port number = %d\n",port);
Selon les sockets, je dois obtenir un numéro de port compris entre 1024 et 5000, mais je suis de numéros de port autour de 30 000.
Que dois-je faire?
source d'informationauteur Anonymous
Vous devez vous connecter pour publier un commentaire.
Des numéros de Port ont une gamme de 0..65535 (bien que souvent 0 a une signification spéciale). À l'origine, BSD TCP mise en œuvre, seulement
root
peut se lier à des ports 1..1023, et attribuée dynamiquement les ports ont été attribués à partir de la plage de 1024 à 5000; les autres ont été disponibles pour les non-privilégiés allocation statique. Ces jours-1024..5000 est souvent pas assez de ports dynamiques, et L'IANA a maintenant officiellement désigné la plage 49152..65535 pour l'affectation de port dynamique. Cependant, même ce n'est pas assez dynamique des ports pour certains serveurs très, de sorte que la portée est généralement configurable (par un administrateur). Moderne, Linux et Solaris (souvent utilisés comme serveurs), la valeur par défaut plage dynamique commence maintenant à 32768. Mac OS X et Windows Vista par défaut de 49152..65535.Regarder
sysctl
pour votre plate-forme. Voici ce que je vois sur mon Mac:Ce sont les plages de noyau pics de ports éphémères.