The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

socket programming (socket bind blocking)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: socket, bind, blocking,  (найти похожие документы)
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _ From : Andrew Simonenko 2:463/360.47 27 Sep 97 21:48:32 Subj : socket programming ________________________________________________________________________________ Hello Nick 26 Sep 97 Nick Evgenev wrote All. NE> Так вот вопрос: можно ли проскипать коннекцию, которой не NE> удается сделать accept(), и перейти к следующей? Можно. Hасколько я понял дело ведется о виртуальном соединении (AF_INET, SOCK_STREAM). Можно поступить двумя способами: 1. Сделать операции неблокирующие by fcntl: listen (sock, 5); fcntl (sock, F_SETFL, FNDELAY | fcntl (sock, F_GETFL, 0)); nsock = accept (sock, (struct sockaddr*)&client, &len) if (errno == EWOULDBLOCK) { /* заблокирован */ } /* читать из nsock*/ 2. Сделать мультиплексирование by select: fd_set read_fd; struct timeval tout; FD_ZERO (&read_fd); FD_SET (sock, &read_fd); tout.tv_sec = 10; /* 10 секунд на ожидание соединения */ tout.tv_usec = 0; if (num = select (sock + 1, &read_fd, (fd_set*)0, (fd_set*)0, &tout) == 0) { printf ("Time out\n"); close (sock); exit (0); } if (FD_ISSET (sock, &read_fd)) { nsock = accept (sock, (struct sockaddr*)&client, &len); /* читать из nsock */ } Остальные строчки добавь по смыслу. Bye. --- FEddi 0.9pl7 via ifcico * Origin: Kiev/UA (2:463/360.47) _ RU.UNIX (2:5077/15.22) _____________________________________________ RU.UNIX _ From : Alexandre Snarskii 2:5020/400 07 Sep 98 12:59:12 Subj : Re: bind() ________________________________________________________________________________ From: Alexandre Snarskii <snar@paranoia.ru> George Brink <George.Brink@f28.n5004.z2.fidonet.org> wrote: GB> Я тут с сокетами pаботаю... И вот иногда мне пpиходится пpибивать повисший GB> сеpвеp. А повтоpно запустить не могу - bind() pугается что адpес уже занят. GB> Как можно пpинудительно освободить адpес:поpт? А то я пока кpоме reboot GB> дpугих способов не знаю :( Во первых, по завершению работы сервера полезно говорить shutdown(s,2); close(s); ( s - твой сокет ) Во вторых при старте сервера полезно говорить int yes=1; s=socket(...) /* это у тебя и так есть :) */ setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) ; setsockopt(s,SOL_SOCKET,SO_REUSEPORT,&yes,sizeof(yes)) ; и только потом уже bind(s,...) -- Alexandre Snarskii the source code is included. --- ifmail v.2.14dev2 * Origin: Уголочек неба.. (2:5020/400@fidonet)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, pavlinux (??), 00:22, 14/02/2007 [ответить]  
  • +/
    #include <sys/socket.h>

        int shutdown(int s, int how);

    Числовые  флаги  how  следует  заменить  на  флаги  SHUT_RD,  SHUT_WR, и SHUT_RDWR, одобренные SUS.

     
  • 2, exn (??), 15:08, 09/12/2007 [ответить]  
  • +/
    по поводу SO_REUSEADDR понятно, а что за SO_REUSEPORT ?? (linux)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру