gpt4 book ai didi

c - SO_REUSEADDR 似乎保持值 4

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:09 25 4
gpt4 key购买 nike

我一直在尝试学习使用 c 进行套接字编程,但遇到了一些让我感到困惑的事情。我写了这段代码:

int main(int argc, char *argv[]) {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
int opt = 1;

if(sockfd == -1) {
printf("socket error\n");
exit(EXIT_FAILURE);
}

if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) {
printf("setsockopt error\n");
exit(EXIT_FAILURE);
}

int getOpt;
socklen_t getOptLen = sizeof(getOpt);
getsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &getOpt, &getOptLen);

printf("%d\n", getOpt);
}

我希望它打印一个,因为那是我传递给 setsockopt 的值,但它打印的是 4。SO_REUSEADDR 的 bool 值是否存储为 4?我是否错误地使用了 getsockopt?

最佳答案

SO_REUSEADDR 的值为 4。或者用十六进制表示(0x0004)

#define SO_REUSEADDR    0x0004      /* allow local address reuse */

参见其他一些选项的定义:

/*
* Option flags per-socket.
*/
#define SO_DEBUG 0x0001 /* turn on debugging info recording */
#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
#define SO_REUSEADDR 0x0004 /* allow local address reuse */
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
#define SO_DONTROUTE 0x0010 /* just use interface addresses */
#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
#define SO_LINGER 0x0080 /* linger on close if data present */
#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */

您可能想看看这个:socket.h包含文件。

关于c - SO_REUSEADDR 似乎保持值 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48245896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com