使用EPOLL 进行CONNECT实现

while(1)
                {
                    connect_fd = accept(listen_fd, (struct sockaddr *)&clt_addr, (socklen_t *)&len);
                    

                    if ( connect_fd >0)
                    {

                        printf("\n +++ server connect fd =%d +++\n", connect_fd);
                        
                        /* set socket noblock mode */
                        KLC_Socket_SetNoBlock(connect_fd);
                        
                        setsockopt(connect_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof(flag));
                        setsockopt(connect_fd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag));

                        /* statistics */
                        socket_connectcounter();

                        
                        if (NULL != Socket_CallBack_Fun)
                            Socket_CallBack_Fun(SOCKCMD_OPENED, connect_fd , NULL);

                        ev.data.fd = connect_fd;
                        ev.events = EPOLLIN|EPOLLET;
                        
                        epoll_ctl(epfd, EPOLL_CTL_ADD, connect_fd, &ev);

                        
                    }

                    if ( connect_fd == -1 && errno==EAGAIN)
                        break;

                }            
 

在SOCKET时无阻塞,并且使用ET模式的情况下,CONNECT 代码要直到读取到错误为止,否则会有丢失CONNECT SOCKET的情况。

扫描二维码关注公众号,回复: 14798531 查看本文章

猜你喜欢

转载自blog.csdn.net/DQWKLC/article/details/120198940
今日推荐