Quagga bgp_accept code



我正在努力理解下面(下面的代码)在做什么,并且正在努力理解sockunions的概念。有人能帮我吗?这与线程和线程文件描述符有什么关系?

提前感谢您的帮助,并愿意接受您可以推荐的任何资源!

Sarah


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)
    {
...
bgp_accept是一个自调用(thread_add_read)函数。(阅读quagga线程概念不要与linux线程概念混淆)。bgp_accept的每次调用都将与其他对等方建立tcp连接。

最新更新