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