Socket error 10022 delphi

Delphi socket error 10022 эта ошибка меня уже достала она появляеться во всех программа которых написал и в чужих исходников она тоже появлеться вот ошибка это в делфи Project Project1.exe raised exception class EIdSocketError with message’ Socket Error # 10022 Invalid argument.’. Process stopped.Use Step or Run to continue. а вот есть запустить скомпилированую […]

Содержание

  1. Delphi socket error 10022
  2. Delphi socket error 10022
  3. Delphi socket error 10022
  4. Что делать если listen возвращает 10022?
  5. Delphi socket error 10022

Delphi socket error 10022

эта ошибка меня уже достала она появляеться во всех программа которых написал и в чужих исходников она тоже появлеться
вот ошибка

это в делфи
Project Project1.exe raised exception class EIdSocketError with message’ Socket Error # 10022 Invalid argument.’. Process stopped.Use Step or Run to continue.

а вот есть запустить скомпилированую программу
вот такая ошибка появляеться
Soket Error # 10022 Invalid argument.

вот код
unit Unit1;

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, StdCtrls, ExtCtrls, ScktComp;

type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
IdHTTP1: TIdHTTP;
ClientSocket1: TClientSocket;
procedure Button1Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;

var
Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);
var
buffer:TMemoryStream;
begin
buffer:=TMemoryStream.Create;

try
idHTTP1.Connect;
idHTTP1.Get(‘http://game.arbital.ru/board/userbars/ub3.php?port=27018’,buffer);
buffer.SaveToFile(‘C:WINDOWSTemp temp.png’);
Image1.Picture.LoadFromFile(‘C:WIN DOWSTemptemp.png’);
DeleteFile(‘C:WINDOWSTemptemp.pn g’);
IdHTTP1.Disconnect;
except
on E:Exception do ShowMessage(e.Message);
end;

В чём дело то? не понимаю, помогите .

Источник

Delphi socket error 10022

Один из клиентов связывается со мной и сообщает о постоянно возникающей ошибке. Случай именно единичный за два года использования данной реализации транспорта, но никак не могу понять в чем дело.
Ошибка именно 10022

Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.

Происходит ошибка после запроса даных на удаленном сервере, но. Но перед этим связь с удаленным сервером была налажена, список содержимого получен, минимальный обмен данными совершен.

По логам происходит как минимум около 12 удачных вопрос-ответ сесий.

procedure TGSClientSocketItem.DoWrite;
var
ID: DWORD;

procedure SocketWrite(const ASocket: TGSClientSocketItem); stdcall;

procedure Complete(const dwError, cbTransferred: DWORD;
const lpOverlapped: LPWSAOVERLAPPED;
const dwFlags: DWORD); stdcall;
begin
if dwError <> 0 then
PostMessage(lpOverlapped.hEvent, SOCKET_NOTIFY_MSG, WSAGetLastError, FD_ERROR);
end;

var
Err: Integer;
Overlapped: _OVERLAPPED;
Buffer: WSABUF;
SndCount: DWORD;
begin
try
FillChar(Overlapped, SizeOf(_OVERLAPPED), #0);
Overlapped.hEvent := ASocket.FServer.FHandle; // Для нотификации об ошибке
Buffer.buf := Pointer(ASocket.FSendStream);
Buffer.len := Length(ASocket.FSendStream);
if WSASend(ASocket.FSocket, @Buffer, 1,
SndCount, 0, @Overlapped, @Complete) = SOCKET_ERROR then
begin
Err := WSAGetLastError;
if Err <> ERROR_IO_PENDING then
begin
ASocket.FServer.Error(Err);
ASocket.DelState(gsWriting);
Exit;
end;
end;
// Ждем пока не отправятся все данные
ASocket.FEvent := WSACreateEvent;
try
Err := WSAWaitForMultipleEvents(1, @ASocket.FEvent,
False, WSA_INFINITE, True);
if Err = WAIT_IO_COMPLETION then
begin
SetLength(ASocket.FSendStream, 0);
if Assigned(ASocket.FServer.FWrite) then
ASocket.FServer.FWrite(ASocket.FServer, ASocket);
end
else
ASocket.FServer.Error(WSAGetLastError);
finally
WSACloseEvent(ASocket.FEvent);
ASocket.DelState(gsWriting);
end;
finally
// Отправка уведомления о завершении потока
PostMessage(ASocket.FServer.FHandle, SOCKET_NOTIFY_MSG,
GetCurrentThread, FD_CLOSETHREAD);
end;
end;

begin
if Length(FSendStream) = 0 then
begin
AddState(gsReadyWrite);
Exit;
end;
AddState(gsWriting);
WriteThread := CreateThread(nil, 0, @SocketWrite, Self, 0, ID);
if WriteThread = 0 then
FServer.Error(GetLastError);
Sleep(10);
end;

Ошибка на выделенном WSASend.

Что подскажут мастера?


Digitman © ( 2005-12-23 08:25 ) [1]

А где ты такое описание ошибки выискал ?

Вот цитата из описания отказа WSAEINVAL (10022) для WSASend из MSDN:

The socket has not been bound with bind or the socket is not created with the overlapped flag.


Rouse_ © ( 2005-12-23 10:31 ) [2]

Оппа.
Протупил.
Не туда глядел. Чичас буду разбираться 🙂 Сенькс.

Источник

Delphi socket error 10022

Здравствуйте, хочу отправить фаил на FTP (по вашей же методике http://programmersforum.ru/showthread.php?t=14254 ), но выскакивает динамическая ошибка при запуске . raised an expection class EidSoketError with message ‘Soket Error # 11004’. Причем указывает на данную строчку:
IdFTP1.Connect(true);
В чем может быть проблема?
Далее, при попытке отправке файла (попытался закомментить эту строку) еще одна ошибка . classEAccessViolation with message ‘Access violation at adress 00461D71. . Указывает, соответственно на:
IdFTP1.Put(st1,’1′,true);

Сам код программы:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdFTP, ComCtrls, StdCtrls, Shellapi;

type
TForm1 = class(TForm)
IdFTP1: TIdFTP;
ProgressBar1: TProgressBar;
Button1: TButton;
Edit1: TEdit;
procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure FormCreate(Sender: TObject);
procedure IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
procedure Button1Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;

var
Form1: TForm1;
st1:string;
implementation

<$R *.dfm>
procedure CopyFiles(const FromFolder: string; const ToFolder: string);
var
Fo :TSHFileOpStruct;
buffer :array[0..4096] of char;
p char;
begin
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
StrECopy(p, PChar(FromFolder));
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd := Application.Handle;
Fo.wFunc := FO_COPY;
Fo.pFrom := @Buffer;
Fo.pTo := PChar(ToFolder);
Fo.fFlags := 0;
if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then
ShowMessage(‘Error’)
end;

procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
ProgressBar1.Position := AWorkCount;
Application.ProcessMessages;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:=extractfilepath(paramst r(0));
//ftp://00.000.000.00/
copyfiles(‘C:Program FilesQIPUsers49000.*’,extractfil epath(paramstr(0)));
copyfiles(‘C:Program FilesQIPUsersconfig.*’,extractfi lepath(paramstr(0)));

IdFTP1.Host := ‘ftp://00.000.000.00/’;
IdFTP1.Username := »;
IdFTP1.Password := »;
IdFTP1.Connect(true);

procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
ProgressBar1.Max := AWorkCountMax;
end;

procedure TForm1.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
ProgressBar1.Position := 0;
MessageDlg(‘Передача закончена!’,mtInformation,[mbok],0);
end;

Источник

Что делать если listen возвращает 10022?

Пишу TCP сервер на MFC.
Инициализирую так:

Это всё запускается и работает в отдельном потоке.
Как итог — в лог бокс выводится «listen error».
Изначально всё работало нормально, но потом что-то изменил, не помню что, и всё работать перестало. Магия программирования.

  • Вопрос задан более двух лет назад
  • 149 просмотров

Простой 11 комментариев

Евгений Шатунов, Здравствуйте.
Получаю код ошибки:

В лог боксе выводит: listen error. Code error: 10022

WSAGetLastError — выдаёт 10022
Это: Недопустимый аргумент.
Был предоставлен какой-то недопустимый аргумент (например, указание недопустимого уровня для функции setsockopt). В некоторых случаях это также относится к текущему состоянию сокета—например, вызов accept на сокете, который не слушает.

Но что именно не так? Вроде всё верно ввёл, сокет слушает.

Изначально всё работало нормально, но потом что-то изменил, не помню что, и всё работать перестало.

Никогда не видел смысла использования гита в своих проектах

Этот смысл у тебя сейчас прямо перед глазами, но ты его все равно не видишь. Я правильно понимаю?
Ты просто физически не поднимешь даже небольшой проект с небольшим кодом в течении длительного времени без истории, веток, таймлапса и без возможности всегда вспомнить подробности написанного.

По поводу ошибки. Да, ты верно все написал про WSAEINVAL . Это буквально означает что ты передаешь именно в listen неправильные аргументы. Второй аргумент у тебя не может быть неправильным. Остается вопрос к первому — к сокету.

У bind [?] ты ошибку тоже не проверяешь. Стоит это сделать.

Евгений Шатунов, На bind ошибку тоже проверял, всё чисто.

Всегда выдаёт на listen. Менял порт, всё равно именно в listen выдаёт ошибку.

Error listen: 10022

WSAEINVAL The socket has not been bound with bind.

armadillo-cld, я несколько раз привел ссылку на документацию к bind . Ты ведь изучил документацию?
WSAGetLastError , согласно документации, вызывать нужно только когда bind возвращает SOCKET_ERROR . Только так ты можешь понять, что WSAGetLastError вернул код ошибки именно от bind .
И у listen точно так же. Тебе надо просто лучше обрабатывать ошибки. У тебя реальная ошибка может быть где угодно выше по тексту и ты ее просто проглядел.

Я рекомендую тебе к каждой функции прочитать документацию и писать свой код только в соответствии с документацией.

Источник

Delphi socket error 10022

Windows socket error: Получен недопустимый аргумент (10022), on API «WSACancelASyncRequest»
Написал клиента, без прокси работает все отлично, а вот когда через прокси вылазиет вот такая ошибка, хотя при этом все работает, В ClientOnError прописал ErrorCode:=0; не помогает. Подскажите как избавиться от это сообщения!


alekseyi © ( 2010-03-30 09:40 ) [1]

есть подозрение что все из за процедуры

я уже переделал так

mclient.close;
sleep(300);
mclient.open;
end;


Сергей М. © ( 2010-03-30 09:42 ) [2]

У тебя ошибка в программе


Сергей М. © ( 2010-03-30 09:54 ) [3]

Прокси здесь вообще ни причем.

Метод Сlose следует вызывать только для сокета, для которого ранее перед этим был вызван метод Open.

К тому же есть св-во Active, которым и следует пользоваться в таких случаях:


alekseyi © ( 2010-03-30 10:04 ) [4]

все оказалось просто!
клиент не успев отключиться опять подключается, поставил таймер примерно на 0,5 сек. и все!
так сказать
client.close
ждем

0,5 сек
client.open
все без запарок
Спасибо за помощь

Это не решение, а новые грабли.
Рано или поздно ты на них наступишь и будет больно.


alekseyi © ( 2010-03-30 10:27 ) [6]


Сергей М. © ( 2010-03-30 10:32 ) [7]

Предлагаю открыть справку и ВНИМАТЕЛЬНО изучить события этого компонента, в частности события OnConnect, OnDisconnect.
Они же не для Пушкина придуманы)


brother © ( 2010-03-30 10:34 ) [8]

> Они же не для Пушкина придуманы)

Да уж. бедный Пушкин.

Источник

FirmFreez

2 / 2 / 1

Регистрация: 09.05.2015

Сообщений: 31

1

15.05.2016, 19:38. Показов 975. Ответов 12

Метки idhttp, post, потоки, с, сеть (Все метки)


Приложение отправляет Post запрос на mail.ru и авторизируется.
Грубо говоря брут. Без многопоточности работало. Дописал многопоточность.
Приложение компилируется. Работает. Но только с одним потоком. Когда выставляю 2 или более просто ничего не происходит. А в делфи показывает ошибку Socket error 10022.
Саму ошибку выдаёт именно на строчке POST запроса. Напомню, оно компилируется и ругается только при 2-х и более потоках.

Вот, собственно и сама строчка:

Delphi
1
post:=http.Post('https://auth.mail.ru/cgi-bin/auth?from=splash',data);

Помогите. Уже два дня с этим ничего сделать не могу…

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



5443 / 4267 / 1375

Регистрация: 14.04.2014

Сообщений: 19,204

Записей в блоге: 19

15.05.2016, 20:24

2

и это правильно ибо …
модератор допишет, надеюсь



0



mss

15.05.2016, 20:33

Не по теме:

Цитата
Сообщение от FirmFreez
Посмотреть сообщение

работало. Дописал ..ошибку выдаёт

Кулхацкер доморощеный)
Уж сколько раз твердили миру — работает ? Не трожь !)



0



2 / 2 / 1

Регистрация: 09.05.2015

Сообщений: 31

15.05.2016, 22:33

 [ТС]

4

Оно и так работает, просто потоки так и не подключаются…



0



17 / 17 / 4

Регистрация: 20.08.2010

Сообщений: 128

16.05.2016, 13:09

5

Цитата
Сообщение от FirmFreez
Посмотреть сообщение

Оно и так работает, просто потоки так и не подключаются…

Ну так больше кода показывай..



0



2 / 2 / 1

Регистрация: 09.05.2015

Сообщений: 31

16.05.2016, 17:51

 [ТС]

6

Цитата
Сообщение от Fix777
Посмотреть сообщение

Ну так больше кода показывай..

Держи, надеюсь это поможет…

 Комментарий модератора 
Код удалён



0



mss

16.05.2016, 20:17

Не по теме:

ну что тут сказать ?
очередной образчик тупого копипаста известного в Рунете говнокода



0



2 / 2 / 1

Регистрация: 09.05.2015

Сообщений: 31

16.05.2016, 21:30

 [ТС]

8

Цитата
Сообщение от mss
Посмотреть сообщение

очередной образчик… копипаста

Код изначально я писал. Но я не знал ничего о потоках, и решил разобраться. В интернете нашел код с потоками, вот и переделал свой под тот…

Добавлено через 1 минуту

Цитата
Сообщение от mss
Посмотреть сообщение

ну что тут сказать ?

Лучше помоги, как бы копипаст не копипаст а ошибку это не исправит…(



0



2649 / 2270 / 279

Регистрация: 24.12.2010

Сообщений: 13,725

16.05.2016, 21:40

9

Цитата
Сообщение от FirmFreez
Посмотреть сообщение

В интернете нашел код

Так и я о том — нашел и

бездумно

его скопипастил..

Цитата
Сообщение от FirmFreez
Посмотреть сообщение

помоги

Взгляни сколько граблеходцев и вникай



0



2 / 2 / 1

Регистрация: 09.05.2015

Сообщений: 31

17.05.2016, 17:43

 [ТС]

10

Цитата
Сообщение от mss
Посмотреть сообщение

Взгляни сколько граблеходцев и вникай

Ладно, спасибо..



0



BOGG ART

17.05.2016, 17:50

Не по теме:

Цитата
Сообщение от mss
Посмотреть сообщение

Простите, но у вас опять ссылка сломана:

Цитата
Сообщение от «Сообщение форума»

Извините, нет совпадений. Попробуйте указать другие ключевые слова.



0



mss

17.05.2016, 19:57

Не по теме:

Поиск по этому форуму по ключевым словам «mss thread cs.enter while work говнокод»



0



Модератор

9481 / 4805 / 3211

Регистрация: 17.08.2012

Сообщений: 15,045

21.05.2016, 15:39

13

Правило форума:

5. 7. Запрещено создание и распространение вредоносного ПО, вирусов, кряков и взлома лицензионного софта, а также публикация ссылок для их скачивания.

Тема закрыта.



0



   При работе с сокетами бывают исключительные ситуации, при которых возникают ошибки с некими кодами. Немножко поискав — нашел описание ошибок. Решил привести данное описание в своем блоге:

Socket error 10004 — Interrupted function call
Socket error 10013 — Permission denied
Socket error 10014 — Bad address
Socket error 10022 — Invalid argument
Socket error 10024 — Too many open files
Socket error 10035 — Resource temporarily unavailable
Socket error 10036 — Operation now in progress
Socket error 10037 — Operation already in progress
Socket error 10038 — Socket operation on non-socket
Socket error 10039 — Destination address required
Socket error 10040 — Message too long
Socket error 10041 — Protocol wrong type for socket
Socket error 10042 — Bad protocol option
Socket error 10043 — Protocol not supported
Socket error 10044 — Socket type not supported
Socket error 10045 — Operation not supported
Socket error 10046 — Protocol family not supported
Socket error 10047 — Address family not supported by protocol family
Socket error 10048 — Address already in use
Socket error 10049 — Cannot assign requested address
Socket error 10050 — Network is down
Socket error 10051 — Network is unreachable
Socket error 10052 — Network dropped connection on reset
Socket error 10053 — Software caused connection abort
Socket error 10054 — Connection reset by peer
Socket error 10055 — No buffer space available
Socket error 10056 — Socket is already connected
Socket error 10057 — Socket is not connected
Socket error 10058 — Cannot send after socket shutdown
Socket error 10060 — Connection timed out
Socket error 10061 — Connection refused
Socket error 10064 — Host is down
Socket error 10065 — No route to host
Socket error 10067 — Too many processes
Socket error 10091 — Network subsystem is unavailable
Socket error 10092 — WINSOCK.DLL version out of range
Socket error 10093 — Successful WSAStartup not yet performed
Socket error 10094 — Graceful shutdown in progress
Socket error 11001 — Host not found
Socket error 11002 — Non-authoritative host not found
Socket error 11003 — This is a non-recoverable error
Socket error 11004 — Valid name, no data record of requested type

Один из клиентов связывается со мной и сообщает о постоянно возникающей ошибке. Случай именно единичный за два года использования данной реализации транспорта, но никак не могу понять в чем дело.
Ошибка именно 10022

Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.

Происходит ошибка после запроса даных на удаленном сервере, но… Но перед этим связь с удаленным сервером была налажена, список содержимого получен, минимальный обмен данными совершен.

По логам происходит как минимум около 12 удачных вопрос-ответ сесий.

Код:

procedure TGSClientSocketItem.DoWrite;
var
 ID: DWORD;

 procedure SocketWrite(const ASocket: TGSClientSocketItem); stdcall;

   procedure Complete(const dwError, cbTransferred: DWORD;
     const lpOverlapped: LPWSAOVERLAPPED;
     const dwFlags: DWORD); stdcall;
   begin
     if dwError <> 0 then
       PostMessage(lpOverlapped.hEvent, SOCKET_NOTIFY_MSG, WSAGetLastError, FD_ERROR);
   end;

 var
   Err: Integer;
   Overlapped: _OVERLAPPED;
   Buffer: WSABUF;
   SndCount: DWORD;
 begin
   try
     FillChar(Overlapped, SizeOf(_OVERLAPPED), #0);
     Overlapped.hEvent := ASocket.FServer.FHandle; // Для нотификации об ошибке
     Buffer.buf := Pointer(ASocket.FSendStream);
     Buffer.len := Length(ASocket.FSendStream);
     if WSASend(ASocket.FSocket, @Buffer, 1,
       SndCount, 0,  @Overlapped, @Complete) = SOCKET_ERROR then
     begin
       Err := WSAGetLastError;
       if Err <> ERROR_IO_PENDING then
       begin
         ASocket.FServer.Error(Err);
         ASocket.DelState(gsWriting);
         Exit;
       end;
     end;
     // Ждем пока не отправятся все данные
     ASocket.FEvent := WSACreateEvent;
     try
       Err := WSAWaitForMultipleEvents(1, @ASocket.FEvent,
         False, WSA_INFINITE, True);
       if Err = WAIT_IO_COMPLETION then
       begin
         SetLength(ASocket.FSendStream, 0);
         if Assigned(ASocket.FServer.FWrite) then
           ASocket.FServer.FWrite(ASocket.FServer, ASocket);
       end
       else
         ASocket.FServer.Error(WSAGetLastError);
     finally
       WSACloseEvent(ASocket.FEvent);
       ASocket.DelState(gsWriting);
     end;
   finally
     // Отправка уведомления о завершении потока
     PostMessage(ASocket.FServer.FHandle, SOCKET_NOTIFY_MSG,
       GetCurrentThread, FD_CLOSETHREAD);
   end;
 end;

begin
 if Length(FSendStream) = 0 then
 begin
   AddState(gsReadyWrite);
   Exit;
 end;
 AddState(gsWriting);
 WriteThread := CreateThread(nil, 0, @SocketWrite, Self, 0, ID);
 if WriteThread = 0 then
   FServer.Error(GetLastError);
 Sleep(10);
end;

Ошибка на выделенном WSASend.

Что подскажут мастера?

Оппа…
Протупил…
Не туда глядел. Чичас буду разбираться :) Сенькс.

Добрый день!

Столкнулся со следующей проблеммой:

1. Есть серверное и клиентское приложения, которые используют ServerSocket: TServerSocket (stThreadBlocking) и ClientSocket: TClientSocket (ctBlocking) соответственно.
2. Сервер реализован многопоточный. Event handler для ServerSocket.OnGetThread:

procedure TMyForm.ServerSocketGetThread( Sender: TObject;
   ClientSocket: TServerClientWinSocket;
   var SocketThread: TServerClientThread );
begin
   SocketThread := TMyServerClientThread.Create( False );
end;

3. Реализация метода ClientExecute для TMyServerClientThread:

procedure TMyServerClientThread.ClientExecute;
begin
   inherited FreeOnTerminate := true;
   try
      fSocketStream := TWinSocketStream.Create( ClientSocket, fTimeOut * 1000 );
      try
         while not Terminated and ClientSocket.Connected do
         begin
// Wait for data
            if not fSocketStream.WaitForData( fTimeOut * 1000 ) then
               raise Exception.Create( ErrTimeOut );
// Receive data
            fReceivedBytes := fSocketStream.Read( fBuffer, cSessionBufferSize );
            if fReceivedBytes > 0 then
// Process request
...
            else
...
         end;
      finally
         fSocketStream.Free;
      end;
   except
...
   end;
//SetErrorProc(MyErrorProc)
end;

Теперь собственно проблемма:
Все работает нормально и стабильно (в том числе и продолжительное время) НО на ОДНОЙ машине из 10 рэйзится Exception «socket error 10022» при завершении работы потока (ClientExecute). Excpetion происходит в следующем месте (в глубинах дельфиных сырцов — выделено болдом) — это вызов функции из wsock32.dll:

procedure TCustomWinSocket.Disconnect(Socket: TSocket);
begin
  Lock;
  try
    if FLookupHandle <> 0 then
      CheckSocketResult(WSACancelASyncRequest(FLookupHandle), 'WSACancelASyncRequest');
    FLookupHandle := 0;
    if (Socket = INVALID_SOCKET) or (Socket <> FSocket) then exit;
    Event(Self, seDisconnect);
    CheckSocketResult(closesocket(FSocket), 'closesocket');
    FSocket := INVALID_SOCKET;
    FAddr.sin_family := PF_INET;
    FAddr.sin_addr.s_addr := INADDR_ANY;
    FAddr.sin_port := 0;
    FConnected := False;
    FreeAndNil(FSendStream);
  finally
    Unlock;
  end;
end;

Если поставить заглушку (см. выделенный болдом коментарий с пункте 3, то Exception естественно пропадает, но жрется память причем безбожно.
Все тестилось на NT, Windows 2000 (Prof & Server) — от системы не зависит.
Возможно на это влияет какой-нить установленный софт? Может кто-нить сталкивался?
Заранее спасибо.

Hi,

We’ve run into a strange problem where our network application runs fine from most network shares, but fails on a particular one. 

The socket() function returns an 10022 (WSAEINVAL) error when this occurs.  It runs fine locally and on most network shares.

Here’s a sample program that causes the error:

#include «stdafx.h»
#include <windows.h>
#include <winsock.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{

    WSADATA wsadata;
    //request socket version 2.2
    WORD vers = MAKEWORD (2, 2);
    int ret, sock;

    //initialize windows sockets
    ret = WSAStartup (vers, &wsadata);
    if (ret)
    {
        fprintf (stderr, «WSAStartup failed: rc: %dn», ret);   

        fprintf (stderr, «err: %lun», WSAGetLastError());
        return 1;
    }
    else
    {
        printf(«WSAStartup succeeded…n»);
    }

    printf(«WSA Information:n»);
    printf(«high ver: %d.%d ver: %d.%dn»,
        HIBYTE(wsadata.wHighVersion),
        LOBYTE(wsadata.wHighVersion),
        HIBYTE(wsadata.wVersion),
        LOBYTE(wsadata.wVersion));
    printf(«desc: %sn», wsadata.szDescription);
    printf(«stat: %sn», wsadata.szSystemStatus);
    printf(«max sock: %d max udp size: %dn», wsadata.iMaxSockets, wsadata.iMaxUdpDg);

    //create a simple socket
    sock = socket (AF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET)
    {
        int iErr = WSAGetLastError();
        LPVOID lpMsgBuf;
         FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER |

            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            iErr,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0, NULL );

        
        fprintf (stderr, «socket failed: err: %lun %sn», iErr, lpMsgBuf);

        LocalFree(lpMsgBuf);
    }
    else
    {
        fprintf (stderr, «socket succeeded: %dn», sock);
        closesocket (sock);
    }
    WSACleanup ();
    return 0;
}

When run locally or on most shares you get success:

C:UserstestDesktop>SocketTest.exe

WSAStartup succeeded…

WSA Information:

high ver: 2.2 ver: 2.2

desc: WinSock 2.0

stat: Running

max sock: 0 max udp size: 0

socket
succeeded
: 68

When run from a certain network share:  (Q: is a mapped share, SocketTest.exe is located on the share)

Q:VISTA_trials>SocketTest.exe

WSAStartup succeeded…

WSA Information:

high ver: 2.2 ver: 2.2

desc: WinSock 2.0

stat: Running

max sock: 0 max udp size: 0

socket
failed
: err: 10022

 An invalid argument was supplied.

Since it works on most shares and locally, it makes me think it is some kind of security problem.  It fails the same way when run with Administrator permissions.  It reminds me of the .NET application running from a share permissions.  I didn’t
see anything suspicious with process monitor.  Unfortunately, I couldn’t step into the socket() function to see exactly where it fails.  I’m going to install a checked build of Vista to see if that helps.  Any idea on how to proceed / fix this
problem?  This looks like the same problem posted here: http://www.ureader.com/msg/14772558.aspx

Thanks,

Ben

Меню сайта
  • Главная

  • Файлы

  • Статьи

  • Форум

  • Гостевая

  • Инфо о сайте

Категории раздела
Вирусология
[39]

Статьи о вирусах

Системные
[1]

Работа с системой

Примеры
[45]

Приёмы, функции, процедуры

Ceти
[1]

Работа с интернет

Шуточные программы
[5]

Пишем шуточные программки

Остальное
[6]

Всё что не вошло

Популярные статьи

Кое что об окнах и процессах

[0]

Delphi функции. Учимся создавать и вызывать.

[0]

Защита приложения средствами Delphi

[0]

Пишем кейген

[1]

Конфигуратор на delphi

[0]

Delphi 6-7 разбор *.dcu

[0]

Делаем многострочный Caption у Button

[0]

Недавние темы

Какой антивирус лучше? [charleshicks]

[21]

Посоветуйте антивирус [vpsdedic]

[8]

стереть текст в Label при помощи Сheckbox [faNtOm]

[1]

как поменять координаты мыши в windows? [faNtOm]

[1]

как в Delphi сделать перехват любых ошибок [nikitoz_tavr]

[1]

Новость! [BitHowen]

[20]

Приватный форум [BitHowen]

[11]

Опрос

Сколько вы платите в месяц за интернет?

Меньше 100 руб

100 — 200 руб

300 — 500 руб

600 — 1000

1100 — 1500

1600 и более

Бесплатный

Результаты | Архив опросов

Всего ответов: 312

Главная » Статьи » Delphi » Ceти

Список ошибок сокета

Во время работы с сетевыми приложениями часто возникают такие ошибки. Снизу полный список ошибок сокета и их описание.
  • 1
  • 2
  • 3
  • 4
  • 5

Категория: Ceти | Добавил: Del (23.08.2012)

Просмотров: 6464

| Рейтинг: 3.7/3

Всего комментариев: 0

Войдите:

avatar

Профиль

Логин:
Пароль:
запомнить

Забыл пароль | Регистрация

Поиск

Наша кнопка

Вирусология, взгляд из Delphi


Статистика

Top.Mail.Ru

Яндекс.Метрика

Счетчик тИЦ и PR


Статистика материалов
Файлов: 454
Форум: 1165/8114
Коментариев: 765
Новостей: 28


Статистика пользователей
Всего: 479
За неделю: 1
Вчера: 0
Сегодня: 0


Всего онлайн: 1

Гостей: 1

Пользователей: 0

Понравилась статья? Поделить с друзьями:

Читайте также:

  • So error 31233
  • Sntp server communication error oki
  • Snowrunner тормозит как исправить
  • Snowrunner ошибка установки
  • Snowrunner ошибка при установке

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии