Форум: "Сети";
Текущий архив: 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