2015-04-16 8 views
0

Во-первых, я использовал 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()); 
+0

Какое сообщение об ошибке? Можете ли вы опубликовать свою полную основную функцию, чтобы у нас был полный пример? – martin

+0

Связано ли это с http://stackoverflow.com/questions/7140438? – martin

+0

Вы уверены, что сервер реализован правильно? – martin

ответ

2

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

+0

Для «открытия нового подключения» подразумевается использование нового сокета. Это может быть или не быть целесообразным, чтобы сначала закрыть оригинал, но вам, безусловно, нужно выполнить новый вызов 'socket()' и 'connect()' * that * socket, не предварительно настроив его на прослушивание. –

+0

Большое спасибо. Это прояснило проблему! – 1225