后台:我正在关注如何使用C套接字侦听和接收传入连接的Beej网络编程指南。
problem :我遇到的问题是,在遍历要侦听的地址链接列表时,我会得到分段错误。我确实检查下一个结构是否为null,但这不起作用。
我尝试过的:在这段代码和我之前编写的工作示例之间,我只能分辨出一个区别,那就是这些地址是我自己的计算机上的地址,而不是另一个主机上的地址。我也看过getaddrinfo的手册页,并且尽可能地遵循示例实现。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>
#define MYPORT "6161"
int main() {
struct addrinfo hints, *res;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AI_PASSIVE;
getaddrinfo(NULL, MYPORT, &hints, &res);
struct addrinfo *addr;
for (addr = res; addr != NULL; addr = addr->ai_next) {
printf("Here's one addr!");
}
return 0;
}
发布于 2020-12-31 19:01:29
我发现了问题..。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>
#define MYPORT "6161"
int main() {
struct addrinfo hints, *res;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AI_PASSIVE;
getaddrinfo(NULL, MYPORT, &hints, &res);
struct addrinfo *addr;
for (addr = res; addr != NULL; addr = addr->ai_next) {
printf("Here's one addr!");
}
return 0;
}
这是你的密码。
这是修正后的代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>
#define MYPORT "6161"
int main() {
struct addrinfo hints, *res;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, MYPORT, &hints, &res);
struct addrinfo *addr;
for (addr = res; addr != NULL; addr = addr->ai_next) {
printf("Here's one addr!");
}
return 0;
}
您只编写了两次ai_family
,从而将AI_PASSIVE
分配给hints.ai_family
而不是hints.ai_flags
。
我试过了修正后的代码,效果很好。
https://stackoverflow.com/questions/65524405
复制相似问题