在单独的函数

时间:2017-02-08 19:16:44

标签: c sockets networking

我有以下代码成功连接到服务器:

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_tosocket_fd变量的address方法完全相同的事情。

我认为我犯了某种语法错误,但我无法弄清楚它是什么。

1 个答案:

答案 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);