setsockopt (sys / socket.h) - PullRequest
       10

setsockopt (sys / socket.h)

1 голос
/ 02 апреля 2010

Прототип для setsockopt:

int setsockopt (int сокет, int уровень, int option_name, const void * option_value, socklen_t option_len);

Все ли правильно? Которые нет?

а.) int buffsize = 50000; setsockopt (s, SOL_SOCKET, SO_RCVBUF, (char *) & buffsize, sizeof (buffsize));

б.) int buffsize = 50000; setsockopt (s, SOL_SOCKET, SO_RCVBUF, (void *) & buffsize, sizeof (buffsize));

с.) char * buffsize = "50000"; setsockopt (s, SOL_SOCKET, SO_RCVBUF, размер буфера, strlen (размер буфера));

д.) setsockopt (s, SOL_SOCKET, SO_RCVBUF, "50000", 5);

1 Ответ

2 голосов
/ 03 апреля 2010

Опция SO_RCVBUF определена как имеющая тип параметра int, поэтому (c) и (d) не верны.

http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tagtcjh_8

Поскольку C автоматически преобразует int * в const void *, приведение не требуется:

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

Однако, поскольку char * и void * также будут автоматически преобразованы, (a) и (b) также должны работать.

...