простой многопоточный сканер портов. при сканировании своей подсети (netmask 255.255.240.0) примерно после 1000 хоста, начинается сабж. При сканировании других подсетей, все нормально работает. Вопрос подкупает своей новизной, "Кто виноват, и что делать?" Прошу помощи! куски кода: int isconnected( int s, fd_set *rd, fd_set *wr, fd_set * ) { int err; int len = sizeof( err );; errno = 0; if ( !FD_ISSET( s, rd ) && !FD_ISSET( s, wr ) ) return 0; if ( getsockopt( s, SOL_SOCKET, SO_ERROR, &err, (socklen_t*)&len ) < 0 ) return 0; errno = err; return err == 0; } bool chkport( const char * ipaddress, int connect_timeout, int port_number ) { bool pOpen = FALSE; int Ms; //SOCKET fd_set rdevents; fd_set wrevents; fd_set exevents; struct sockaddr_in peer; struct timeval tv; int flags; int rc; bzero( &peer, sizeof( peer ) ); peer.sin_family = AF_INET; peer.sin_port = htons( port_number ); peer.sin_addr.s_addr = inet_addr( ipaddress ); Ms = socket( AF_INET, SOCK_STREAM, 0 ); if ( !( Ms >= 0 ) ) { cout <<"socket call failed"; return FALSE; } if( ( flags = fcntl( Ms, F_GETFL, 0 ) ) < 0 ) cout <<"fcntl (F_GETFL) failed"; if ( fcntl( Ms, F_SETFL, flags | O_NONBLOCK ) < 0 ) cout <<"fcntl (F_SETFL) failed"; rc = connect( Ms, ( struct sockaddr * )&peer, sizeof( peer ) ); if ( rc == -1 && errno != EINPROGRESS ) { cout <<"connect return -1 errno = "<< errno; pOpen = FALSE; } else if ( rc == 0 && errno != EINPROGRESS ) /* already connected? */ { cout <<"connected quickly"; pOpen = TRUE; } else { FD_ZERO( &rdevents ); FD_SET( Ms, &rdevents ); wrevents = rdevents; exevents = rdevents; tv.tv_sec = 0; tv.tv_usec = connect_timeout; rc = select( Ms + 1, &rdevents, &wrevents, &exevents, &tv ); if ( rc < 0 ) { cout <<"select failed"; } else if ( rc == 0 ) { cout <<"connect timed out"; } else if ( isconnected( Ms, &rdevents, &wrevents, &exevents ) ) { cout <<"connected 2"; pOpen = TRUE; } else cout <<"connect failed 2"; } if ( fcntl( Ms, F_SETFL, flags ) < 0 ) cout <<"fcntl (F_SETFL) failed"; shutdown( Ms, SHUT_RDWR); close(Ms); return pOpen; }
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум покритикуйте следующий код(не мой) (2005)
- Форум Запись в неблокируемый udp сокет (2020)
- Форум сокет. получить данные (2007)
- Форум Таймаут для connect() (2009)
- Форум Непонятки с сокетами (2006)
- Форум Получение списка интерфейсов через netlink (2013)
- Форум Уничтожение дочернего процесса (2004)
- Форум Проблема с select (2002)
- Форум Проблема с сокетами (2011)
- Форум Чтение выхлопа процесса без ожидания его завершения (2019)