我連接到使用以下connect()
呼叫遠程主機連接調用:重寫使用LD_PRELOAD
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 *
任何提示?
謝謝!
爲什麼要改變第二對Arg的'常量' – EJP
我實際上是試圖重寫? :int connect(int socket,const struct sockaddr * address,socklen_t address_len);' '定義在''中。所以我的問題是:「如何正確地將一個const指針轉換爲一個非const指針(例如,在我的例子中'const sockaddr *'到'sockaddr *')? –
是的,這是從'socket.h'獲取的: '#define __CONST_SOCKADDR_ARG const struct sockaddr *' –