hu-unix connect() 问题 急谢谢

发布于 2022-08-30 09:10:34 字数 3847 浏览 14 评论 0

int connectSocket(socket_t tsocket, const char * ip, short port)
{
        struct sockaddr_in addr;
        memset(&addr, 0, sizeof(struct sockaddr_in));
       
        //新添加  解决对方服务器没有开机阻塞问题aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
        int flags;
        int retcode;
        fd_set rdset;
        struct timeval tv;
        int ret;
        //新添加  解决对方服务器没有开机阻塞问题aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
       
        if(tsocket > 0) //连接目标机
        {
               //下面获取套接字的标志
                if ((flags = fcntl(tsocket, F_GETFL)) < 0)
                        {
                    etsDebug(0, "获取套接字的标志错误[%d]", flags);
                    return -1;
                    
                        }
               
                //下面设置套接字为非阻塞
                if (fcntl(tsocket, F_SETFL, flags | O_NONBLOCK) < 0)
                        {
                    etsDebug(0, "设置套接字为非阻塞错误[%d]", flags);
                    return -1;
                        }
                       
               
                addr.sin_family      = AF_INET;
                addr.sin_port        = htons(port);
               
                if(!ip)
                {
                        addr.sin_addr.s_addr = 0;
                }
                else
                {
                        addr.sin_addr.s_addr = inet_addr(ip);
                        //memcpy(&addr.sin_addr, ip, sizeof(ip));
                }
               
                ret = connect(tsocket, (const struct sockaddr*)&addr, sizeof(struct sockaddr));
               
                }

连接远程ip     在非阻塞模式下返回值总是为-1。但在阻塞模式下能连接成功 。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文