Конечная точка транспорта не подключена, сбой при подключении ()

Сначала я использовал bind() и listen() для привязки порта к адресу 0.0.0.0. Однако теперь я не могу подключиться.

sprintf (addrbuf, "%s-%d", SVR_ADDR, SVR_PORT);
StringToSockaddr (addrbuf, &destAddr);
if (connect(psock,(struct sockaddr *) &destAddr,sizeof(destAddr)) < 0)
    die("failed to connect to server");
printf("connected to server at %s\n",getTime());

person 1225    schedule 16.04.2015    source источник
comment
Что такое сообщение об ошибке? Можете ли вы опубликовать свою полную основную функцию, чтобы у нас был полный пример?   -  person martin    schedule 16.04.2015
comment
Это связано с stackoverflow.com/questions/7140438?   -  person martin    schedule 16.04.2015
comment
Вы уверены, что сервер реализован правильно?   -  person martin    schedule 16.04.2015
comment
Вы уверены, что psock - это порт, а не сокет? Потому что первым аргументом connect() должен быть клиентский сокет, а не номер порта...   -  person rodrigo    schedule 16.04.2015
comment
Попробуйте получить строку ошибки (perror) после сбоя подключения.   -  person Prabhu    schedule 16.04.2015


Ответы (1)


Функция bind() назначает сокету локальный адрес и/или порт. Это хорошо и хорошо. Однако функция listen() настраивает сокет как тот, который будет принимать подключения. Если вы собираетесь использовать сокет для инициации соединения с удаленной машиной, то вам не следует использовать на нем listen().

person John Bollinger    schedule 16.04.2015
comment
Открытие нового соединения подразумевает использование нового сокета. Может быть целесообразно или нецелесообразно сначала закрывать исходный сокет, но вам, безусловно, необходимо выполнить новый вызов socket() и connect() этого сокета без предварительной настройки его для прослушивания. - person John Bollinger; 16.04.2015
comment
Большое тебе спасибо. Это прояснило проблему! - person 1225; 16.04.2015