ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

setsockopt непонятная проблема
  #1  
Старый 18.11.2009, 22:14
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию setsockopt непонятная проблема

Использую setsockopt для таймаута в случае с recv(чекаю прокси).Проблема в том что в большинстве случаев recv висит до конца таймаута, но если приконектится к тому же проксику без setsockopt то recv получает данные в пределах таймаута
ВОт код:
Код:
DWORD WINAPI check(LPVOID lParam)
{
	/*WSADATA wsd;
	WSAStartup(MAKEWORD(2,2),&wsd);*/
	char Ip[30],msg[100]="                         ";
	char *port=new char[30];
	char *indata=new char[1024*256];
	memset(indata,NULL,1024*256);
	char *result=new char[1024*256];
	memset(result,NULL,1024*256);
	SOCKADDR_IN adr;
	struct timeval timeout;
	ZeroMemory(&timeout,sizeof(timeval));
	timeout.tv_sec= 9;
	SOCKET s;
	ZeroMemory(&adr,sizeof(adr));
	for(int i=0;i!=Form1->ListBox1->Count;i++)
	{
		strcpy(Ip,Form1->ListBox1->Items->operator [](i).c_str());
		strcpy(port,Form1->ListBox1->Items->operator [](i).c_str());
		strtok(Ip,":");
		port+=strlen(Ip)+1;
		adr.sin_family=AF_INET;
		adr.sin_addr.s_addr=inet_addr(Ip);
		adr.sin_port=htons(atoi(port));
		WSASetLastError(0);
		s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
		setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeval));
		connect(s,(sockaddr*)&adr,sizeof(adr));
		send(s,msg,100,0);
		Form1->Memo1->Lines->Add("1\r");
		recv(s,indata,1024*256,0);
		Form1->Memo1->Lines->Add("2\r");
		Form1->Memo1->Lines->Add("Count:"+AnsiString(i)+"\r");
		//wsprintf(result,"Proxy: %s:%s\rAnswer:\r%s\rSocketError: %d",Ip,port,indata,WSAGetLastError());
		//Form1->Memo1->Lines->Add(result);
		strtok(indata,"\r\n\r\n");
		Form1->Memo1->Lines->Add(AnsiString(indata)+"\r");
		if(strstr(indata,"200")!=NULL)
		{
            Form1->ListBox2->Items->Add(AnsiString(Ip)+":"+AnsiString(port));
        }
		port-=strlen(Ip)+1;
		closesocket(s);
		memset(result,NULL,1024*256);
		memset(indata,NULL,1024*256);
	}
	//WSACleanup();
	return(0);
}
Если коротко то проблема в том что recv нереагирует на появивщиеся данные в сокете и таймаут тикает до конца

Последний раз редактировалось _nic; 18.11.2009 в 22:17..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с дедиками [help!] Sniper482 Безопасность 4 14.09.2009 21:22
Непонятная проблема с шифрованием EFS demontager Windows 1 16.08.2009 16:52
Непонятная проблема с интернетом по всей локалке ZneP Администрирование 6 19.06.2009 15:27
Непонятная проблема Alexandr II Защита ОС: вирусы, антивирусы, файрволы. 4 25.04.2009 00:38
Проблема отключения служб!!! Snap Безопасность 3 10.02.2009 15:12



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ