2010-04-02 15 views
1

Le prototype de Setsockopt est:setsockopt (sys/socket.h)

int setsockopt (socket int, le niveau d'int, int option_name, const void * de option_value, 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);

Répondre

2

L'option SO_RCVBUF est définie comme ayant un 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 convertit automatiquement un int *-const void *, ne jetterai est nécessaire:

int buffsize = 50000; 
setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffsize, sizeof(buffsize)); 

Cependant, parce que char * et void * seront également converties automatiquement, (a) et (b) devrait également fonctionner.