![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WSARecv или ReadFile?
Демо © (2009-10-29 23:56:00)В WinSock2 появились новые функции - WSARecv и WSASend.
Как я понимаю, кроме кроссплатформенности они ничем не лучше старых ReadFile и WriteWile.
Просьбы высказать мысли по этому поводу.
Имеются ли какие-то преимущества у новых функций?
Сергей М. (2009-10-30 14:43:00) [1]Ну выскажи Коншину своё "фи", если тебе от этого полегчает)
Демо (2009-10-30 14:39:00) [2]
> Сергей М. © (30.10.09 14:36) [28]
> > я полдня бился над WSAAcceptЯ встроил его в TIdCustomTCPServer
> за час.Лажа с параметром всплыла и была исправлена при первом
> же тестовом прогоне)
А я, к сожалению, впервые использовал WSAAccept и понадеялся на портированный модуль, искал у себя ошибки.
Сергей М. (2009-10-30 14:36:00) [3]
> я полдня бился над WSAAccept
Я встроил его в TIdCustomTCPServer за час.
Лажа с параметром всплыла и была исправлена при первом же тестовом прогоне)
Демо (2009-10-30 14:30:00) [4]Эх, если бы знать, что это единственный недочёт...
Демо (2009-10-30 14:29:00) [5]
> > Всего-то один параметрНу бывают маленькие неприятности,
> куда ж без них)
Ага... а я полдня бился над WSAAccept -))
Сергей М. (2009-10-30 14:29:00) [6]
> Всего-то один параметр
Ну бывают маленькие неприятности, куда ж без них)
Демо (2009-10-30 14:29:00) [7]
> Сергей М. © (30.10.09 14:25) [21]
> > Возможно ли на этом уровне уменьшить угрозу от SYN-атак?
> Нет.Этим должен заниматься файрвол.
Понятно. Значит не буду этим заморачиваться...
Демо (2009-10-30 14:27:00) [8]Всего-то один параметр...
Демо (2009-10-30 14:26:00) [9]В winsock2.pas:
function WSAAccept( s : TSocket; addr : TSockAddr; addrlen : PInteger; lpfnCondition : LPCONDITIONPROC; dwCallbackData : DWORD ): TSocket; stdcall;
TSockAddrIn = packed record
case Integer of
0: (sin_family : u_short;
sin_port : u_short;
sin_addr : TInAddr;
sin_zero : array[0..7] of Char);
1: (sa_family : u_short;
sa_data : array[0..13] of Char)
end;
PSockAddrIn = ^TSockAddrIn;
TSockAddr = TSockAddrIn;
PSockAddr = ^TSockAddr;
SOCKADDR = TSockAddr;
SOCKADDR_IN = TSockAddrIn;
Вот так работает:
function WSAAccept(
s: TSocket;
addr:PSockAddr;
addrlen: PInteger;
lpfnCondition: LPCONDITIONPROC;
dwCallbackData: DWORD): TSocket; stdcall; external 'ws2_32.dll';
А описание структур взял из стандартного winsock.pas.
Сергей М. (2009-10-30 14:25:00) [10]
> Возможно ли на этом уровне уменьшить угрозу от SYN-атак?
Нет.
Этим должен заниматься файрвол.
Демо (2009-10-30 14:22:00) [11]
> Polevi © (30.10.09 14:20) [19]
> Я использую его модуль, проблем не было
Проблема возникла при реализации WSAAccept с LPCONDITIONPROC.
Polevi (2009-10-30 14:20:00) [12]Я использую его модуль, проблем не было
Демо (2009-10-30 14:12:00) [13]PS.
Обнаружил ошибки в портированном WINSOCK2.PAS от Алексея Коншина...
Демо (2009-10-30 14:11:00) [14]
> Сергей М. © (30.10.09 14:06) [15]
> + к [14]WSAAccept позволяет организовать настоящее условное
> акцептирование запросов на соединение
WSAAccept я уже реализовал именно таким способом.
Вопрос по этому поводу:
Возможно ли на этом уровне уменьшить угрозу от SYN-атак?
Демо (2009-10-30 14:10:00) [15]
> Polevi © (30.10.09 14:00) [14]
> WSA позволяют работать с цепочкой буферов, иногда это удобно
У меня не будет обмена данными большого размера, планируется обмен короткими пакетами.
На сервере хочу предусмотреть возможность работы под хорошей нагрузкой, поэтому SOCKET IO OVERLAPPED + IOCP.
На клиенте можно попроще - просто SOCKET IO OVERLAPPED.
Конечно, не факт, что сервер будет очень уж популярен, но предусмотреть нужно.
Просто наконец-то взялся за проект, который мечтаю уже 10 лет сделать.
Надеюсь, что наконец-то воплощу в реальность.
Сергей М. (2009-10-30 14:06:00) [16]+ к [14]
WSAAccept позволяет организовать настоящее условное акцептирование запросов на соединение
Polevi (2009-10-30 14:00:00) [17]WSA позволяют работать с цепочкой буферов, иногда это удобно
Демо (2009-10-30 13:49:00) [18]
> Сергей М. © (30.10.09 13:03) [12]
> И опять же касаемо кроссплатформенности - как раз по этим
> соображениям не следует пользовать ни WSA-функции ни Read/WriteFile.
>
Ну что касаемо кроссплатформенности - тут у меня проблем нет.
Проект будет работать на платформе Windows.
Поэтому свой выбор сделаю всё-таки в пользу WSA-функций, видимо.
Сергей М. (2009-10-30 13:03:00) [19]И опять же касаемо кроссплатформенности - как раз по этим соображениям не следует пользовать ни WSA-функции ни Read/WriteFile.
Только send[to]/recv[from] - они обязаны присутствовать на любой платформе, поддерживающей базовую функциональность гнезд Беркли.
Демо (2009-10-30 12:56:00) [20]
> Сергей М. © (30.10.09 12:52) [10]
> > Есть ли кроме этого плюсы?А разве этого не достаточно
> ?Ведь Read/WriteFile[Ex] не даст тебе такой функциональности,
> если она требуется..
Спасибо, Сергей.
Как раз вот на эту инфу с флагом не обратил внимания.