· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.NETWORKS —› WSAAccept и callback

Посл.отвђт Сообщенiе


Дата: Окт 30, 2003 00:55:01

При вызове wsaaccept не происходит вызов callback ф-ции, а сразу соединяет. Не пойму почему... Ошибок не выдает, слушающий сокет с опцией SO_CONDITIONAL_ACCEPT, WSAStartup - 2.2. Есть идеи???

зы: пишу на winapi в дельфях


Дата: Окт 30, 2003 02:17:40

код аттачить нынче не модно?


Дата: Окт 30, 2003 11:26:56 · Поправил: m0zart

//callback функция
function AcceptClient(lpCallerId: LPWSABUF; lpCallerData: LPWSABUF; lpSQOS,lpGQOS: LPQOS; lpCalleeId,lpCalleeData: LPWSABUF;
    g: GROUP; dwCallbackData: DWORD ) : Integer; stdcall;
begin
 lpCalleeData.len := 0;
 if (...) then Result := CF_ACCEPT else Result := CF_REJECT;
end;

function CreateClientListeningSocket: Boolean;
var
  WSAData: TWSAData;
  addr: TSockAddr;
  ret: Integer;
  val: BOOL;
begin
  val := true;
  ret := WSAStartup(MAKEWORD(2, 2), WSAData);
  addr.sin_family := AF_INET;
  addr.sin_addr.S_addr := ADDR_ANY;
  addr.sin_port := htons(12345);
  FSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  WSAAsyncSelect(FSocket, hServer, WM_SOCKET, FD_ACCEPT + FD_CLOSE);
  bind(FSocket, @addr, sizeOf(TSockAddr));
  setsockopt(FSocket, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, @val, sizeof(bool));
  listen(FSocket, SOMAXCONN);
end;

на FD_ACCEPT выполняется:
  addrlen := 0;
  wParam := WSAaccept(wParam, addr, @addrlen,AcceptClient,0);
  WSAAsyncSelect(wParam, hServer, WM_SOCKET, FD_READ + FD_WRITE + FD_CLOSE);


Всё везде работает и без ошибок, но AcceptClient как будто нету вообще.


Дата: Окт 30, 2003 15:19:29

Попробовал твой код, только написал его на С - у меня все работает. Только я написал addrlen = sizeof(addr);


Дата: Окт 30, 2003 23:57:20

Во во... addrlen = 0 потому что на addr наплевать... хотя я и так пробовал... Видать пора с дельфей уходить на Си...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.073