我有以下代码成功连接到服务器:
response = connect(socket_fd, (struct sockaddr *) &address, sizeof(address));
if (response < 0) {
printf("Failed to connect\n");
exit(1);
} else {
printf("Connected\n");
}
但是,如果我将此代码移入其自己的函数并使用connect_to_server(socket_fd, &address)
调用它,则连接失败。
void * connect_to_server(int socket_fd, struct sockaddr_in *address) {
int response = connect(socket_fd, (struct sockaddr *) &address, sizeof(address));
if (response < 0) {
printf("Failed to connect\n");
exit(1);
} else {
printf("Connected\n");
}
}
据我所知,我在这里正确地传递论据,所以我不知道问题是什么。我已经基本完成了分离使用相同send_to
和socket_fd
变量的address
方法完全相同的事情。
我认为我犯了某种语法错误,但我无法弄清楚它是什么。
答案 0 :(得分:1)
下面
void * connect_to_server(int socket_fd, struct sockaddr_in *address) {
你已经传入一个指针。
在这里
int response = connect(socket_fd, (struct sockaddr *) &address, sizeof(address));
你再次拿一个地址,传递给connect()
,即指针的地址。传入的大小也是指针的大小而不是它指向的大小。
你不需要这个,但是把接收到的指针和它指向的大小一起传递给:
int response = connect(socket_fd, (struct sockaddr *) address, sizeof(*address));
甚至更好(因为sizeof
是操作员而不是函数)do:
int response = connect(socket_fd, (struct sockaddr *) address, sizeof *address);