2013-08-27 4 views
0

Я пытаюсь понять, что делает следующий (код ниже), и я стараюсь понять концепцию sockunions. Может кто-нибудь мне помочь? Что это связано с потоками и файловыми дескрипторами потоков?Quagga bgp_accept код

Цените свою помощь заранее и будете открыты для любых ресурсов, которые вы можете рекомендовать!

Сара


static int 
bgp_accept (struct thread *thread) 
{ 
int bgp_sock; 
int accept_sock; 
union sockunion su; 
struct bgp_listener *listener = THREAD_ARG(thread); 
struct peer *peer; 
struct peer *peer1; 
char buf[SU_ADDRSTRLEN]; 

/* Register accept thread. */ 
accept_sock = THREAD_FD (thread); 

    if (accept_sock < 0) 
    { 
    zlog_err ("accept_sock is nevative value %d", accept_sock); 
    return -1; 
    } 

listener->thread = thread_add_read (master, bgp_accept, listener, accept_sock); 

/* Accept client connection. */ 
bgp_sock = sockunion_accept (accept_sock, &su); 
    if (bgp_sock < 0) 
    { 
... 

ответ

0

bgp_accept является функцией самостоятельного вызова (thread_add_read). (Читайте Quagga понятия нити не путать с понятием Linux нити). Каждый вызов bgp_accept устанавливает tcp-соединение с другими одноранговыми узлами.