首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setsockopt (sys/socket.h)

setsockopt (sys/socket.h)
EN

Stack Overflow用户
提问于 2010-04-02 13:41:48
回答 1查看 7.6K关注 0票数 1

setsockopt的原型是:

代码语言:javascript
复制
int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);

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

a.)

代码语言:javascript
复制
int buffsize = 50000;
setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&buffsize, sizeof(buffsize));

b.)

代码语言:javascript
复制
int buffsize = 50000;
setsockopt(s, SOL_SOCKET, SO_RCVBUF, (void *)&buffsize, sizeof(buffsize));

c.)

代码语言:javascript
复制
char *buffsize = "50000";
setsockopt(s, SOL_SOCKET, SO_RCVBUF, buffsize, strlen(buffsize));

( d.)

代码语言:javascript
复制
setsockopt(s, SOL_SOCKET, SO_RCVBUF, "50000", 5);
EN

回答 1

Stack Overflow用户

发布于 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 *,因此不需要强制转换:

代码语言:javascript
复制
int buffsize = 50000;
setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffsize, sizeof(buffsize));

但是,由于char *void *也将被自动转换,(a)和(b)也应该工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2566915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档