Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Блокируемый сокет

496
09 ноября 2004 года
Jes
81 / / 28.03.2003
Приветствую всех...Народ подскажите как сделать правильный неблокируемый сокет...все работает ничего, только вот блокируется программа на время сканирования наглухо...это вероятно из-за того что сокет создается блокируемый ....функция сканирования:
Код:
DWORD TForm1::ScanPorts(AnsiString ip_str, int portus){

int sock;
int err=0;
struct hostent *host=NULL;
struct sockaddr_in addr;
FILE *log;
char *logfile="LoG.txt";
ip = ip_str.c_str();

WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
return -1;

memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
unsigned long s_adr = inet_addr(ip);

addr.sin_addr.s_addr = s_adr;
addr.sin_port = htons(portus);
sock = socket(AF_INET, SOCK_STREAM, 0);

if (s_adr == INADDR_NONE)
{
host = gethostbyname(ip);
if(host == NULL)
{
RichEdit1->Lines->Add(WSAGetLastError());
return -1;
}
memcpy(&addr.sin_addr, host->h_addr_list[0], host->h_length);
}
if (sock == INVALID_SOCKET )
{
RichEdit1->Lines->Add(WSAGetLastError());
return -1;
}
timeout(sock);
memset(buff,0,sizeof(buff));
unsigned long cou = 1;  //если закоментировать эту и следующие строки то работает в блокирующем режиме если оставить их то с сокета ничего не читается (что-то типа нет конекта, но сканирование идет быстро но безрезультатно..:()
ioctlsocket(sock, FIONBIO, &cou);
int i=connect(sock,(struct sockaddr *)&addr, sizeof(addr));
if(i==0){
send(sock, "HEAD / HTML/1.0\n\n",17,0);
recv(sock, buff, sizeof(buff), 0);
RichEdit1->Lines->Add(AnsiString(ip)+"\n");
RichEdit1->Lines->Add(buff);
("+++++++++++++++++++++++++++++++++++++++++++++++++");
}
else {
RichEdit1->Lines->Add(AnsiString(ip)+"\t\t\t\t\t""Error connect");
closesocket(sock);
WSACleanup(); }
RichEdit1->Refresh();
log=fopen(logfile, "a+");
fprintf(log,"[+++++++++++++++++%s+++++++++++++++++++]\n", ip);
fprintf(log,"%s\n",buff);
fprintf(log,"\n");
fclose(log);
return 0;
}

За ранее признателен.............
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог