2013-09-08 2 views
0

Я работаю над программой на языке C, которая создает соединение между клиентом и сервером. Когда я запускаю подключение к сокету, который я уже создал, я все время получаю сообщение об ошибке, что передаю недопустимый аргумент.Недопустимый аргумент: connect() Программирование сокетов C

Любая помощь была бы замечательной!

void client(char* ipAddress, char* serverPort){ 
    //code for setting up the IP address and socket information from Beej's Guide to Network Programming 
    //Need to setup two addrinfo structs. One for the client and one for the server that the connection will be going to 
    int status; 
    //client addrinfo 
    struct addrinfo hints, *res; // will point to the results 
    //server addrinfo 
    int socketDescriptor; 
    int addressLength; 
    memset(&hints, 0, sizeof hints); // make sure the struct is empty 
    hints.ai_family = AF_UNSPEC;  // don't care IPv4 or IPv6 
    hints.ai_socktype = SOCK_STREAM; // TCP stream sockets 
    hints.ai_flags = AI_PASSIVE;  // fill in my IP for me 
    //setup client socket 
    if ((status = getaddrinfo(ipAddress, serverPort, &hints, &res)) != 0) { 
     printf("%s \n", "This error above"); 
     fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status)); 
     exit(1); 
    } 

    if((socketDescriptor = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) ==-1){ 
     perror("client: socket"); 
    } 
    addressLength = sizeof hints; 
    if(connect(socketDescriptor, res->ai_addr, addressLength)==-1){ 
     close(socketDescriptor); 
     perror("client: connect"); 
    } 
    } 
+1

Что такое 'res' ?. – NPE

+0

Скорее всего, ошибка для 'serverRes',' struct addrinfo'? – duskwuff

+0

Вы, кажется, вставили неверный код, пожалуйста, исправьте ... – hyde

ответ

1

Помимо некоторых несовместимых имен переменных в вашем коде, это кажется неправильным:

addressLength = sizeof hints; 
if(connect(socketDescriptor, res->ai_addr, addressLength)==-1) ... 

Это должно быть

if(connect(socketDescriptor, res->ai_addr, res->ai_addrlen)==-1) ... 
+0

Я пробовал сделать это изменение и по-прежнему получаю ту же ошибку. – natediggs

+0

@natediggs: 'getaddrinfo()' возвращает связанный список возможных адресов. Вы, вероятно, должны пройти через этот список и попробовать поочередно. –

Смежные вопросы