Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > connection refused


Автор: IoganeGambaPuti 4.3.2009, 22:42
Здравствуйте.Прогоняю в отладчике код и получаю,на функции connect() ошибку: connection refuced. Я так понимаю у меня закрыт 13ый порт.
Код

#include    "unp.h"

int
main(int argc, char **argv)
{
    int                    sockfd, n;
    char                recvline[MAXLINE + 1];
    struct sockaddr_in    servaddr;

    if (argc != 2)
        err_quit("usage: a.out <IPaddress>");

    if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        err_sys("socket error");

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port   = htons(13);    /* daytime server */
    if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
        err_quit("inet_pton error for %s", argv[1]);

    if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
        err_sys("connect error");

    while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
        recvline[n] = 0;    /* null terminate */
        if (fputs(recvline, stdout) == EOF)
            err_sys("fputs error");
    }
    if (n < 0)
        err_sys("read error");

    exit(0);
}


Манипуляции с iptables к ничему не приводят:

% IPTABLES -A INPUT -p TCP -s 0/0 --dport 13 -j ACCEPT

Почему порт остаётся закрытым и как это исправить?

Автор: vinick 4.3.2009, 23:46
Цитата(IoganeGambaPuti @  4.3.2009,  22:42 Найти цитируемый пост)
connection refuced. Я так понимаю у меня закрыт 13ый порт.

Еще это может означать, что 13 порт никто не слушает.  Сервер запущен?

Автор: IoganeGambaPuti 5.3.2009, 00:57
% a.out 127.0.0.1 
Т. е. я через интерфейс lo конекчусь к себе же на 13 порт, а там должен висеть работающий сервер даты и времени,который эту дату обязан мне предоставить в "человеко формате". Я так понимаю этот сервер всегда запущен, главное открыть порт.

Автор: vinick 5.3.2009, 02:15
Цитата(IoganeGambaPuti @  5.3.2009,  00:57 Найти цитируемый пост)
Я так понимаю этот сервер всегда запущен, главное открыть порт. 

Нет. Главное запустить сервер.
посмотри команду netstat. она поможет узнать слушает ли кто-то порты и на каких интерфейсах.

Автор: Ezik 12.3.2009, 19:35
Попробуйте добавить в начале программы

Код

WSADATA wsd;
    WORD Version = MAKEWORD(2,2);

    if (WSAStartup(Version,&wsd)!=0) {
        printf("WSAStartup error\n");
        return 1;
    }; 

Автор: Олег2005 13.3.2009, 21:21
Для лупбэка нет понятия закрытый порт.
Если программа сервера работает - то и порт, на котором она слушает сеть (в данном случае сам себя - открыт).
Если программа не работает - то и порта нет.
Проверьте сервис на 13-ом порту - есть или нет его.

да, еще что то я сомневаюсь
  if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)  err_sys("connect error");
структура адреса обязана быть приведена к типу sockaddr
  if (connect(sockfd, (sockaddr *) &servaddr, sizeof(servaddr)) < 0)        err_sys("connect error");


Еще одно сомнение - прогон в отладчике.
Сетевые программы обычно в отладчиках имеют особенность глючить.
Лучше делать исполняемый код - и его проверять как самостоятельный.

Ezik, 
Речь не идет о Виндовсе......... smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)