setsockopt(sys / socket.h)

时间:2010-04-02 13:41:48

标签: c prototype sockets setsockopt

setsockopt的原型是:

int setsockopt(int socket,int level,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,buffsize,strlen(buffsize));

d。) setsockopt(s,SOL_SOCKET,SO_RCVBUF,“50000”,5);

1 个答案:

答案 0 :(得分:2)

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)也应该有效。