Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

10022 ошибка... Забавно.   Найти похожие ветки 

 
Rouse_ ©   (2005-12-23 00:38) [0]

Один из клиентов связывается со мной и сообщает о постоянно возникающей ошибке. Случай именно единичный за два года использования данной реализации транспорта, но никак не могу понять в чем дело.
Ошибка именно 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]

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



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
2-1143436391
pkm
2006-03-27 09:13
2006.04.09
Char и string.


3-1139904805
TrainerOfDolphins
2006-02-14 11:13
2006.04.09
Подсказка для конкретной записи.


2-1143090988
Sirus
2006-03-23 08:16
2006.04.09
Вертикальный грид


4-1137094740
AndreyRus
2006-01-12 22:39
2006.04.09
Временный запрет доступа всех процессов к HDD


9-1127930102
Conferno
2005-09-28 21:55
2006.04.09
Настройки качества текстур





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский