Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > TTcpServer свойство BlockMode


Автор: Delphist 1.3.2009, 16:42
Есть компонент TTcpServer, у которого есть свойство BlockMode, имеющий три возможных значения:
bmBlocking
bmNonBlocking
bmThreadBlocking

В чем разница между этими значениями, и как они влияют на TTcpClient (у которого кстати тоже есть BlockMode = (bmBlocking/bmNonBlocking) - и которые тоже не очень понятны). 

Автор: Virtuals 1.3.2009, 19:52
Delphist, хм а что сложного? 
блокирующий/неблокирующий режим - как во всех SOCK соединениях ждать/неждать завершение комманды.
bmThreadBlocking режим с многопоточным ежимом, типа блокирующий режим пока не отдали сокет потоку.

Автор: Delphist 2.3.2009, 11:17
Цитата(Virtuals @  1.3.2009,  20:52 Найти цитируемый пост)

блокирующий/неблокирующий режим - как во всех SOCK соединениях ждать/неждать завершение комманды.

меня интересует у TTcpServer когда BlockMode = bmBlocking и BlockMode = bmNonBlocking
что это означает для сервака?
с bmThreadBlocking все понятно

Автор: Virtuals 2.3.2009, 11:48
Delphist, так я и говорю, все то-же самое что и для любого сокета
вот кусок исходника. TTcpServer
Код

    FSocket := ErrorCheck(socket(Integer(Xlat_Domain[FDomain]), Integer(Xlat_SocketType[FSockType]), FProtocol));
    FActive := FSocket <> INVALID_SOCKET;
    if FActive then
    begin
      if FBlockMode = bmNonBlocking then
      begin
  {$IFDEF MSWINDOWS}
        NonBlock := 1;
        ErrorCheck(ioctlsocket(FSocket, FIONBIO, NonBlock));
  {$ENDIF}
  {$IFDEF LINUX}
        ErrorCheck(fcntl(FSocket, F_SETFL, O_NONBLOCK));
  {$ENDIF}
      end;
      FBytesReceived := 0;
      FBytesSent := 0;
      DoCreateHandle;
    end;
  end;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)