首页 文章

setsockopt(sys / socket.h)

提问于
浏览
1

setsockopt的原型是:

int setsockopt(int socket,int level,int option_name,const void * option_value,socklen_t option_len);

以下都是正确的吗?哪个不是?

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);

1 回答

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

相关问题