Главная страница
    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.007 c
4-39640
maxim2
2003-01-22 09:08
2003.03.13
Послать сообщение окну


1-39308
Андрусь
2003-02-28 14:46
2003.03.13
функция для форматирования длинных строк в мессагах


3-39224
{{{KOTOS}}}
2003-02-23 12:01
2003.03.13
Почему при открытии БД PARADOX по сети появляется ошибка


1-39376
Inquisitor
2003-03-02 21:14
2003.03.13
Закрыть программу при пререзагрузке/выключении компа


7-39613
TankMan1
2002-11-14 00:04
2003.03.13
Как отменить удаление файла с винта...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский