gpt4 book ai didi

c - 在 C 中使用套接字的段错误的未知原因

转载 作者:行者123 更新时间:2023-11-30 18:57:10 26 4
gpt4 key购买 nike

这是通过 C 语言的套接字进行通信的服务器端代码。我遇到了段错误,但我可以理解为什么会发生这种情况。这是代码:

int server_sd ; // The socket descriptor

server_sd = socket(PF_INET, SOCK_STREAM, 0);

if (server_sd == -1) {
cout << "Could not create socket";
} else {
cout << "Socket created" << endl;
}

struct protoent *proto;
proto = getprotobyname("http");

struct sockaddr_in addr;
cout << "sockaddr is created" << endl;

memset((void *)&addr, 0, sizeof(addr));
cout << "memset is done";

addr.sin_family = AF_INET;
addr.sin_port = proto->p_proto;
addr.sin_addr.s_addr = INADDR_ANY; /* any interface */

cout << "Binding server now:" << endl;

if( bind(server_sd,(sockaddr *)&addr , sizeof(addr)) < 0) {
//print the error message
perror("bind failed. Error");
} else {
cout << "bind done" << endl;
}

listen(server_sd, 10); /* make into listener with 10 slots */

cout << "Waiting for incoming connections..." << endl;

我正在使用 cout 语句来跟踪问题发生的位置。这是程序的输出:

Socket created
sockaddr is created

Segmentation fault (core dumped)

最佳答案

你可能在这里崩溃了:

addr.sin_port = proto->p_proto;

proto可能为 NULL。

你看不到memset is done的原因打印是因为你没有 << endl那里,和cout将缓冲数据,直到看到换行符或显式刷新。

关于c - 在 C 中使用套接字的段错误的未知原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21937559/

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