Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];

Вниз

socket+ctBlocking   Найти похожие ветки 

 
kostik78ua   (2003-01-24 09:47) [0]

Помогите разобраться с сокетами.
На форму поместил ServerSocket1 (stNonBlocking) и 6 ClientSocket-ов (ctBlocking).

procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Port:=1234;

ClientSocket1(..6).Port:=1234;
ClientSocket1(..6).Host:="localhost";

ServerSocket1.Open;
ClientSocket1(..6).Open;
end;

В результате 5 коннектов проходят, а на шестом выдает 10061 ошибку (Подключение не установлено).

Интересно, что при ClientSocket1.ClientType = ctNonBlocking; соединений может быть сколько угодно (больше пяти).

Объясните почему и как с этим бороться!


 
Digitman   (2003-01-24 10:04) [1]

приведи-ка ты полный код)


 
kostik78ua   (2003-01-24 10:12) [2]

procedure TForm1.Button1Click(Sender: TObject);
begin
ss.Port:=1234;
ss.ServerType:=stNonBlocking;
ss.Open;

cs1.Port:=1234;
cs2.Port:=1234;
cs3.Port:=1234;
cs4.Port:=1234;
cs5.Port:=1234;
cs6.Port:=1234;

cs1.Host:="localhost";
cs2.Host:="localhost";
cs3.Host:="localhost";
cs4.Host:="localhost";
cs5.Host:="localhost";
cs6.Host:="localhost";

cs1.ClientType:=ctBlocking;
cs2.ClientType:=ctBlocking;
cs3.ClientType:=ctBlocking;
cs4.ClientType:=ctBlocking;
cs5.ClientType:=ctBlocking;
cs6.ClientType:=ctBlocking;

cs1.Open;
cs2.Open;
cs3.Open;
cs4.Open;
cs5.Open;
cs6.Open;
end;

procedure TForm1.ssClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if Socket.ReceiveLength>0 then Memo1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Stream : TWinSocketStream;
Buffer : array[0 .. 100] of Char;
begin
Stream := TWinSocketStream.Create(cs1.Socket, 60000);
try
FillChar(Buffer, length(Buffer), #0);
Buffer := "11111";
Stream.Write(Buffer, StrLen(@Buffer));
finally
Stream.Free;
end;
end;


 
Digitman   (2003-01-24 10:57) [3]

Это нормально. По-умолчанию для тек.реализации WinSock-сервис-провайдера очередь вх.запросов к серверному "слушающему" гнезду на акцепт не превышает SOMAXCONN = 5.
6-й запрос (в составе твоих 6-ти почти одновременных необработанных запросов на соединение) будет отвержен из-за превышения размера backlog-очереди.

См. описание WinSock-ф-ции listen()


 
Digitman   (2003-01-24 12:12) [4]

WSAECONNREFUSED = 10061

Даже имя константы кода ошибки об этом говорит :
"Winsock application error : connection REFUSED")

Читай документацию на WinSock)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
14-39484
passm
2003-02-27 16:20
2003.03.13
Unated Devices


14-39549
RV
2003-02-26 16:14
2003.03.13
:)


6-39430
Чайник
2003-01-23 18:33
2003.03.13
Все login для данного домена


1-39377
Kair
2003-03-02 21:28
2003.03.13
Загрузка в Image


4-39644
Uncle Archi
2003-01-21 21:25
2003.03.13
ExitWindowsEx





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский