我使用以下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 *
的任何提示?
谢谢!
答案 0 :(得分: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]