Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WinSock: глючит recvfrom [D6, WinXP]


Micah'GF ©   (2004-06-03 19:58:00) 

при компиляции постоянно ругается на код:
var
 Data: PChar;
 UDP_RemAdress: TSockAddr;
...
 recvfrom(sSocketGlobal, Data, 1024, 0, UDP_RemAdress, sezeof(UDP_RemAdress));

говорит: Types of actual and formal var parameters must be identical
и указывает на конец строки.. Я не могу понять какой параметр неправильно указываю...


Rouse_   (2004-06-08 07:54:00) [1]

var
 Block: Integer;
...
   Block := 1;
   ioctlsocket(FSocket, FIONBIO, Block);


Micah'GF   (2004-06-07 19:04:00) [2]

ооо... спасибо!  // У меня оказывается bind закоментирован был
а я и незаметил..

Помогите переключить сокет в неблокирующий режим, а то прога виснет на recvfrom.


Digitman   (2004-06-07 13:14:00) [3]


> С буфером вроде все в порядке - даже делал так


при указательном типе переменной, определяющей буфер, оператор разыменования ^ обязателен !


> всеравно возвращает 10022


значит. что-то не в порядке со структурой UDP_RemAdress


Григорьев Антон   (2004-06-07 11:35:00) [4]

А bind для этого сокета сделан? Хотя бы неявный?


Micah'GF   (2004-06-06 20:08:00) [5]

нет.. С буфером вроде все в порядке - даже делал так, но всеравно возвращает 10022...

2 Rouse_
пояснение не совсем понятно... Что я не сделал?


Verg   (2004-06-04 12:38:00) [6]


> Micah'GF   (03.06.04 21:01) [3]
> а... а почему recvfrom постоянно возвращает ошибку 10022
> ?!


В данном слочае ты промазал с буфером.
Предположим, что ты выделили для него память:
GetMem(Data, 1024);
Но тогда и

> Len := sizeof(UDP_RemAdress);
> recvfrom(sSocketGlobal, Data ^{Внимание!}, 1024, 0, UDP_RemAdress, Len);


т.к.
function recvfrom(s: TSocket; varBuf; len, flags: Integer;
 var from: TSockAddr; var fromlen: Integer): Integer; stdcall;


Rouse_   (2004-06-03 21:09:00) [7]

WSAEINVAL (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.


Micah'GF   (2004-06-03 21:01:00) [8]

а... а почему recvfrom постоянно возвращает ошибку 10022 ?!
socket() возвращает нормальный сокет, и sendto работает..


Micah'GF   (2004-06-03 20:57:00) [9]

млин.. а я голову изломал..
Спасибо.


panov   (2004-06-03 20:25:00) [10]

>Micah'GF   (03.06.04 19:58)
Последний параметр.

var
Data: PChar;
UDP_RemAdress: TSockAddr;
Len: Integer;
...
Len := sizeof(UDP_RemAdress);
recvfrom(sSocketGlobal, Data, 1024, 0, UDP_RemAdress, Len);


Наверх

Титульная страница Поиск, карта сайта Написать письмо