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);发布于 2010-04-02 20:18:04
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)也应该工作。
https://stackoverflow.com/questions/2566915
复制相似问题