У меня проблемы с работой winsock, я просто озадачен и не знаю, что делать дальше.getaddrinfo() не удалось решить winsock
getaddrinfo(NULL)
только там, чтобы показать, что она признает, что аргументы getaddrinfo
должны иметь, но он все еще говорит, что не может решить ее ..
Когда я пытаюсь скомпилировать его в командной строке, и добавить несколько флагов ошибок, это то, что я получаю:
C:\MinGW\bin>g++ -O0 -g3 -Wall -c -fmessage-length=0 -o test2.exe C:\Users\David\
workspace\vmulti\Debug\test2.o -lws2_32 -lmingw32
g++: warning: C:\Users\David\workspace\vmulti\Debug\test2.o: linker input file un
used because linking not done
Вот ошибка компилятор бросает на меня, я компиляции с MinGW:
Function 'getaddrinfo' could not be resolved test.cpp /vmulti line 48 Semantic Error
Function 'getaddrinfo' could not be resolved test.cpp /vmulti line 50 Semantic Error
too few arguments to function 'int getaddrinfo(const char*, const char*, const addrinfo*, addrinfo**)' test.cpp /vmulti line 48 C/C++ Problem
Здесь «S код:
ws2tcpip.h:
#if (_WIN32_WINNT >= 0x0501)
void WSAAPI freeaddrinfo (struct addrinfo*);
int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*,
struct addrinfo**);
int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD,
char*,DWORD,int);
#else
/* FIXME: Need WS protocol-independent API helpers. */
#endif
test.cpp (моя программа):
#define _WIN32_WINNT 0x0501
#include <string.h>
#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#include <stdint.h>
#include <ws2tcpip.h>
using namespace std;
#define MYPORT "3490" // the port users will be connecting to
#define BACKLOG 10 // how many pending connections queue will hold
void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
int main(int argc, char *argv[])
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {
fprintf(stderr, "WSAStartup failed.\n");
exit(1);
}
struct sockaddr_storage their_addr;
int addr_size;
struct addrinfo hints, *res;
int sockfd, new_fd, len, numbytes;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // use IPv4 or IPv6, whichever
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE; // fill in my IP for me
getaddrinfo(NULL); // Line 48
if(getaddrinfo(NULL, MYPORT, &hints, &res) == -1); // Line 50
cout << "Getaddrinfo error" << endl;
Я понятия не имею, что «* Функция„getaddrinfo“не может быть решен *» означает, но убедитесь, что вы ссылаетесь на 'ws2_32.lib'. Что касается последней ошибки, вы вызываете функцию, которая принимает 4 аргумента с одним аргументом, поэтому я не знаю, чего вы ожидаете. – ildjarn
Да, я связываю ws2_32.lib, getaddrinfo (NULL), который я только что добавил, чтобы увидеть, не скажет ли он, что аргументы неправильны (и, таким образом, фактически находят функцию, пока она говорит мне, что она не может) – Dron
Проблема в том, сообщения об ошибках, которые вы отправили, не выводятся никаким инструментом, с которым я знаком, поэтому я даже не знаю, что «не удалось решить» означает в этом контексте. – ildjarn