コードで:
if ((host = (struct hostent*) gethostbyname(address) ) == 0) // address is a string
4.5.x gcc でクロス コンパイル (ジェネリック アーム アーキテクチャ) を実行すると、警告が表示されます。
(.text+0x1558): warning: gethostbyname is obsolescent, use getnameinfo() instead.
getnameinfoは次のとおりです。
int WSAAPI getnameinfo(
__in const struct sockaddr FAR *sa,
__in socklen_t salen,
__out char FAR *host,
__in DWORD hostlen,
__out char FAR *serv,
__in DWORD servlen,
__in int flags
);
そして、より多くのパラメーターがありました...そして、私はそれと混同しています.gethostbynameが機能していたので、それが機能する必要があります。gethostbyname の場合のように、単純に愚かな状態に保つために渡すパラメータは何ですか?
最後に、ここに私の試みがあります:
struct sockaddr_in servAddr;
struct hostent *host; /* Structure containing host information */
/* open socket */
if ((handle = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
return LILI_ERROR;
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(address.ptr());
servAddr.sin_port = htons(port);
char servInfo[NI_MAXSERV];
if ( ( host = (hostent*) getnameinfo(
(struct sockaddr *) &servAddr
,sizeof (struct sockaddr)
,address.ptr(), address.size()
,servInfo, NI_MAXSERV
,NI_NUMERICHOST | NI_NUMERICSERV ) ) == 0)
return LILI_ERROR;
if (::connect(handle, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0)
return LILI_ERROR;
それはうまくコンパイルされ、起動時にセグメンテーション違反はありませんが、サーバーに接続できません:(