Конференция "Сети" » проблема с bind [WinSock]
 
  • 123321 (17.05.11 19:38) [0]
    Здравствуйте!
    Сразу приведу конфигурацию: Delphi 2007, Windows XP SP2.
    Проблема заключается в том, что при создании сервера (код приведен ниже) на функции bind программа не отдает управление, и даже через диспетчер задач процесс невозможно завершить, сервер крутится в отдельном потоке. Вопрос, сталкивался ли кто с таким и почему такое может происходить?

    Такое происходит не всегда, какой-либо закономерности нет, параметры порта и т.д. всегда корректны.

     
     addr.sin_family:=AF_INET;
     addr.sin_port:=htons(Fport);
     addr.sin_addr:=in_addr(htonl(INADDR_ANY));

     sock_ser:=socket(AF_INET, Sock_stream, 0);
     if sock_ser<0 then begin
       ...
     end
     else begin
       err:=bind(sock_ser,addr,sizeof(addr)); //вот здесь не отдает управление
       if err<0 then begin
         ...
       end;

       err:=listen(sock_ser, 1);
       if err<0 then begin
         ...
       end;

  • Palladin © (17.05.11 22:24) [1]
    addr.sin_family:=AF_INET;
     addr.sin_port:=htons(Fport);
     addr.sin_addr:=in_addr(htonl(INADDR_ANY));

     sock_ser:=socket(AF_INET, Sock_stream, 0);
     if sock_ser<0 then begin
       ...
     end
     else begin
       err:=bind(sock_ser,addr,sizeof(addr)); //вот здесь не отдает управление, уверен?
       if err<0 then begin
         ...
       end;

       err:=listen(sock_ser, 1);
       if err<0 then begin
         ...
       end;

  • Rouse_ © (17.05.11 22:39) [2]
    Сделай асинхронку, и выставь SO_REUSEADDR при ошибке
  • 123321 (18.05.11 16:39) [3]
    Palladin, уверен, отладчиком проходил.

    > Сделай асинхронку, и выставь SO_REUSEADDR при ошибке

    ассинхронку попробую, но мне желательно делать через блокирующие сокеты.
    SO_REUSEADDR попробую, о результатах позднее отпишусь.
 
Конференция "Сети" » проблема с bind [WinSock]
Есть новые Нет новых   [134436   +23][b:0][p:0.001]