1

connect()我使用以下调用连接到远程主机:

result = connect(sockfd, (struct sockaddr *)&address, len);

其中地址代表sockaddr_in结构,为了执行sockaddr *的目的而转换为connect()。但是,使用库注入,我可以通过定义自己的连接函数来覆盖连接调用:

int connect (int fd, __CONST_SOCKADDR_ARG addr, socklen_t len)
{
   // My code in between
}

但是,我无法将第二个参数(__CONST_SOCAKADDR_ARG)转换为sockaddr_in指针或sockaddr就此而言。__CONST_SOCKADDR_ARG宏扩展为const struct sockaddr *. 以下行:

struct sockaddr_in* providedIPv4AddressStructure = (struct sockaddr_in*) addr;

让我得到以下错误指示:

error: cannot convert to a pointer type

而且当然:

warning: initialization from incompatible pointer type [enabled by default]

有人对如何正确投射__CONST_SOCAKADDR_ARG到有任何提示sockaddr_in *吗?

谢谢!

4

1 回答 1

1

无法重现:

#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>

int main() {
    __CONST_SOCKADDR_ARG p;
    struct sockaddr_in *q;

    q = (struct sockaddr_in *) p;
}

没有错误,只有未使用变量的警告:

$ gcc -std=c11 -Wall -pedantic test.c
test.c: In function ‘main’:
test.c:7:25: warning: variable ‘q’ set but not used [-Wunused-but-set-variable]
test.c:9:7: warning: ‘p’ is used uninitialized in this function [-Wuninitialized]
于 2013-10-11T11:12:20.040 回答