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;
}
Блокируемый сокет
Приветствую всех...Народ подскажите как сделать правильный неблокируемый сокет...все работает ничего, только вот блокируется программа на время сканирования наглухо...это вероятно из-за того что сокет создается блокируемый ....функция сканирования: