|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
WinSock и бесконечный цикл
Помогите, не могу никак решить одну проблему.
Есть функция отправки GET запроса на хост через сокеты, мне нужно сделать её в бесконечном цикле, чтобы она постоянно слала на хост этот запрос. Но проблема в том, что при реализации этого через библиотеку WinSock запросы успешно выполняются, но и + ко всему на компьютере открывается кучу соединений, в результате чего компьютер попросту намертво виснет. Вот моя функция: Код:
function fWSRecv():string; var hSocket: TSocket; hHost: PHostEnt; hAddr: TSockAddrIn; hTimeout: TTimeVal; samzapros,kuda:string; begin kuda:='localhost'; samzapros:='GET /log/ass.php' + #13#10 + 'Host: localhost' + #13#10 + 'User-Agent: Mozilla/5.0' + #13#10 + 'Accept: text/html' + #13#10 + 'Accept-Language: ru' + #13#10 + 'Accept-Charset: windows-1251' + #13#10 + 'Connection: close' + #13#10#13#10; while true do begin hSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); hHost := gethostbyname(PChar(kuda)); hAddr.sin_family := PF_INET; hAddr.sin_port := htons(80); hAddr.sin_addr := pinaddr(hHost^.h_addr^)^; hTimeout.tv_usec := 0; hTimeout.tv_sec := mstimeout; setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, @hTimeout, sizeof(ttimeval)); connect(hSocket, hAddr, SizeOf(hAddr)); Send(hSocket, samzapros[1], length(samzapros), 0); CloseSocket(hSocket); end; end; WSAStartup($101, ws); fWSRecv; Тут ну всё испробовал, и ставил AF_INET вместо PF_INET, и т.д… но никак понять не могу, почему он открывает кучу соединений, в результате чего все виснет. Кто знает в чем ошибка, пожалуйста подскажите. |
#2
|
|||
|
|||
Выкинь все, кроме отправки из цикла. Естественно, у тебя создается сокет на каждой итерации....
|
#3
|
|||
|
|||
Не понял, что именно надо выкинуть? тут ведь всё важно, и если какую команду выкинуть, то запрос попросту не дойдёт.
Что касаемо закрытия, я тоже пологаю что команды CloseSocket(hSocket); будет явно мало, если я что то ещё не закрываю, то просьба указать что именно. Или может я не в том месте цикл поставил? Просто в других местах он либо не работает вообще, либо работает вот так как есть, с кучей соединений ;( |