ploom
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Добрый день, очень мутное название темы, так как не знаю что собственно ищу. Проблема такая, есть сервер и самописное ПО и есть клиенты (из внутренней локалки), когда сервак обрабатывает запросы клиентов, он проверяет с вышестоящим сервером а потом им отсылает подтверждение - об успешности или нет. Назовет у нас это 6 статус, у нас на серваке он занимает даже для огромной пачки (долю секунду) Пришло время переносить сервак, перенесли на новое железо, всё работает нормально, кроме этого 6 статуса. Теперь на каждом запросе он висит секунд по 20-30. Так как нет больше программиста и перепробовали всё, есть мысли что это какой-то ключ в реестре или еще что. Так как в новом профиле на старом сервере - проблема появилась. Собственно вот лог ошибки может кому поможет: 27/04/20 ; 22:35:52 ; 18:Реульт. запроса Sess=4089322 Res=7 Err=0 27/04/20 ; 22:36:13 ; Ошибка запуска ТСР клиента All_done Error CONNECT TCPCL 10060: WSAETIMEDOUT И программист с удаленки, который хоть как-то это По поддерживает в исходниках нашел эту процедуру: Его комментарий: тут в основном функции winapi, собственно кларионовского кода то нет. висит функция s32_connect. s32_connect это алиас на виндовую функцию connect Сама процедура: cWinSock.TCPCl procedure() ! запустить TCP клиента RetValue ushort locAddr ulong code RetValue=0 if self.tcpClRun then return(self.tcpCSocket). !Проверить не запущен ли уже self.tcpCSocket=s32_socket(AF_INET,SOCK32_STREAM,IPPROTO_IP) !Coздать сокет if self.tcpCSocket=SOCK32_ERROR Self.ErrMsg = 'Error Get Socket TCPCL ' & self.GetWSErr() else self.tcpCC_SA.sin_family=AF_INET locAddr=INADDR_ANY ! =0 memcpy(address(self.tcpCC_SA)+4,address(locAddr),4) !ТСР любой (пока) self.tcpCC_SA.sin_port=0 !Порт = 0 !Связать сокет с именем(Sokadddr_in) размер if s32_bind(self.tcpCSocket,self.tcpCC_SA,size(self.tcpCC_SA)) Self.ErrMsg = 'Error BIND Socket TCPCL ' & self.GetWSErr() else self.tcpCS_SA.sin_family=AF_INET !Протокол TCP locAddr=s32_inet_addr(self.tcpHostIP)!Преобразовать Адрес сервера в сетевой memcpy(address(self.tcpCS_SA)+4,address(locAddr),4)!Записать в Sokaddr_in self.tcpCS_SA.sin_port=s32_htons(self.SrvPort) !Преобразовать № порта в сетевой if s32_connect(self.tcpCSocket,self.tcpCS_SA,size(self.tcpCS_SA)) !Подключить сокет Self.ErrMsg = 'Error CONNECT TCPCL ' & self.GetWSErr() else if WSAAsyncSelect(self.tcpCSocket, self.hWndTCPCl, | !Установть текущее окно обработчиком сообщений EVENT:SocketAccepted, FD_CLOSE + FD_READ + FD_WRITE) Self.ErrMsg = 'Error WSAAsyncSelect TCPCL ' & self.GetWSErr() else RetValue=self.tcpCSocket end end end end if RetValue then self.tcpClRun=1. !Клиент запущен return(RetValue) ! 0 если ERROR и номер сокета если все ОК Может подкинет кто, с помощью чего (ключа, софта) эту проверку отключили/обошли. Так как если на серваке отключить локалку, сменить на 2 сетевухе ИП - работает мгновенно, при том что адресатов (хостов из локалки не видит), но пишет что всё ОК. Вот для примера с рабочего сервера с вырубленными интерфейсами (ошибок нет): 27/04/20 ; 22:28:42 ; Отправлено All_done 202544220 in222.255.255.110 27/04/20 ; 22:28:42 ; Отправлено All_done 202544222 in222.255.255.110 27/04/20 ; 22:28:42 ; Отправлено All_done 207651161 in222.255.255.105 27/04/20 ; 22:28:42 ; Отправлено All_done 200589660 in221.255.255.112 27/04/20 ; 22:28:42 ; Отправлено All_done 207781852 in192.168.255.35 27/04/20 ; 22:28:42 ; Отправлено All_done 207781854 in192.168.255.35 27/04/20 ; 22:28:42 ; Отправлено All_done 201438348 in221.255.255.207 27/04/20 ; 22:28:42 ; Отправлено All_done 207781882 in192.168.255.35 |