всем привет, ситуация у меня такая: при вызове функции connect зависает программа, собсна в программе ничё хитрого нет она стучится до яндекс серверf по 13 порту и ip 77.88.21.11 и по идее принимает некоторую строку, но это уже не важно так как зависает на вызове функции connect. Я искал в инете чтото подобное и как я понял проблема в том что у меня стоит роутер. Вопрос такой, в чём именно проблема? Если в роутере то как не изменяя программу настроить роутер( так как я думаю программа не должна зависить от способа организации сети на таком уровне ), а если надо изменять программу то что именно изменять. Вот листинг( с помощью выводу единичек я понял что проблема в коннекте :) ):
#include <iostream>
#include "unp.h"
#include "error.h"
using namespace std;
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");
cout << 1 << endl;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
err_quit("inet_pton error for %s", argv[1]);
cout << 1 << endl;
if(connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
err_sys("connect error");
cout << 1 << endl;
while( (n = read(sockfd, recvline, MAXLINE)) > 0)
{
recvline[n] = 0;
if(fputs(recvline, stdout) == EOF)
err_sys("fputs error");
cout << 1 << recvline << endl;
}
if(n<0)
err_sys("read error");
cout << recvline << endl;
return 0;
}
P.S. Пример сделан из учебника У. Р. Стивенс - UNIX. Разработка сетевых приложений, 3-е изд. - 2007