setsockopt (sys / socket.h)

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.