|
|
| Посл.отвђт | Сообщен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 |