trong mã:Làm thế nào để sử dụng getnameinfo thay vì gethostbyname?
if ((host = (struct hostent*) gethostbyname(address)) == 0) // address is a string
Tôi đã có cảnh báo khi biên dịch chéo (kiến trúc cánh tay generic) trên 4.5.x gcc:
(.text+0x1558): warning: gethostbyname is obsolescent, use getnameinfo() instead.
getnameinfo là:
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
);
Và nó có nhiều thông số hơn ... Và tôi bị nhầm lẫn với nó, tôi chỉ cần nó hoạt động như gethostbyname đang làm việc. Tham số nào để vượt qua để giữ cho nó đơn giản ngu ngốc như với gethostbyname?
Cuối cùng đây là cố gắng của tôi:
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;
Nó biên dịch tốt và không có lỗi segmentation trên khởi động nhưng tôi không thể kết nối máy chủ của tôi với nó :(
Khi bạn đã đánh dấu câu hỏi bằng [tag: C++], tôi khuyên bạn nên sử dụng [boost.asio] (http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio.html) . – Griwes
Cảm ơn bạn. nhưng tôi không muốn liên lạc. Nhưng tôi nghĩ không có lý do để không sử dụng tăng, vì vậy tôi nghĩ rằng tôi sẽ xem xét. – Cynede
https://www.google.com/search?btnG=1&pws=0&q=winsock+getnameinfo+tutorial Số 3. – dutt