Le prototype de setsockopt est:
int setsockopt (int socket, niveau int, int nom_option, const void * valeur_option, socklen_t option_len);
Les éléments suivants sont-ils tous corrects? Qui ne sont pas ?
a.) int buffsize = 50000; setsockopt (s, SOL_SOCKET, SO_RCVBUF, (char *) & buffsize, sizeof (buffsize));
b.) int buffsize = 50000; setsockopt (s, SOL_SOCKET, SO_RCVBUF, (void *) & buffsize, sizeof (buffsize));
c.) char * buffsize = “50000”; setsockopt (s, SOL_SOCKET, SO_RCVBUF, buffsize, strlen (buffsize));
d.) setsockopt (s, SOL_SOCKET, SO_RCVBUF, “50000”, 5);
L’option SO_RCVBUF
est définie comme ayant le type de paramètre int
, donc (c) et (d) ne sont pas corrects.
http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tagtcjh_8
Parce que C convertira automatiquement un int *
en const void *
, aucun cast n’est requirejs:
int buffsize = 50000; setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffsize, sizeof(buffsize));
Toutefois, étant donné que char *
et void *
seront également convertis automatiquement, les fonctions (a) et (b) devraient également fonctionner.