int32_t SockEndPoint::connect_server() { struct sockaddr_in client_addr; int sock_ret = 0; bzero(&client_addr, sizeof(client_addr) ); client_addr.sin_family = AF_INET; client_addr.sin_addr.s_addr = htons(INADDR_ANY); client_addr.sin_port = htons(0); client_socket_ = socket( AF_INET, SOCK_STREAM, 0); if ( client_socket_ < 0) { LOGV(LL_ERROR, "Create Socket Failed!\n" ); return -1; } /* if ( bind( client_socket_ , (struct sockaddr*)&client_addr, sizeof(client_addr))) { LOGV(LL_ERROR, "Client Bind Port Failed!\n" ); return -2; }*/ struct sockaddr_in server_addr; bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; if (inet_aton(addr_.c_str() , &server_addr.sin_addr) == 0) { LOGV(LL_ERROR, "Server IP Address Error!\n" ); return -3; } int flags = 0,error = 0; socklen_t len; flags = fcntl( client_socket_, F_GETFL, 0); fcntl(client_socket_, F_SETFL, flags | O_NONBLOCK); server_addr.sin_port = htons( port_ ); socklen_t server_addr_length = sizeof(server_addr); if ( (sock_ret = connect(client_socket_, (struct sockaddr*)&server_addr, server_addr_length)) < 0) { if ( errno != EINPROGRESS ) return -1; } if( sock_ret == 0 ) { LOGV(LL_INFO, "local connect To %s:%d ok!\n", addr_.c_str() , port_ ); } FD_ZERO(&rdfds); FD_SET( client_socket_ , &rdfds); wdfds = rdfds; struct timeval tv; tv.tv_sec = 5; tv.tv_usec = 0; sock_ret = select( client_socket_ + 1, &rdfds, &wdfds , NULL, &tv); if ( sock_ret <= 0 ) { LOGV(LL_ERROR, "select error or timeout !"); close(client_socket_); return -1; } if (/* FD_ISSET(client_socket_, &rdfds) ||*/ FD_ISSET(client_socket_, &wdfds) ) { if ( FD_ISSET(client_socket_, &rdfds) ) { LOGV(LL_ERROR, "socket refuse !"); close(client_socket_); return -1; } if ( getsockopt(client_socket_, SOL_SOCKET, SO_ERROR, &error, &len) != 0) { if ( error ) { LOGV(LL_ERROR, "Can not connect To %s:%d refuse,error %d msg %s !\n", addr_.c_str() , port_, error, strerror(error) ); return -4; } } else { LOGV(LL_INFO, "connect To %s:%d ok!\n", addr_.c_str() , port_ ); connect_status_ = 1; } }else { LOGV(LL_ERROR, "Can not connect To %s:%d timeout!\n", addr_.c_str() , port_ ); close(client_socket_); return -1; } printf("trace %d %d\n", client_socket_, sock_ret ); fcntl(client_socket_, F_SETFL, flags); return 0; }
相关推荐
《Linux环境下基于Qt的VLC开发链接库libvlc-qt-0.8.0详解》 在Linux操作系统中,多媒体播放器VLC以其强大的解码能力和跨平台特性深受开发者喜爱。而libvlc-qt库是VLC与Qt框架集成的重要桥梁,它允许开发者在Qt应用...
在Linux驱动开发中,创建一个异步通知驱动程序通常包括以下几个关键步骤: 1. **注册中断处理程序**:驱动程序需要注册一个中断处理函数,这个函数会在硬件设备触发中断时被调用。这通常通过`request_irq()`函数...
它涵盖了Linux环境下的高级程序设计技术,包括系统调用、进程管理、内存管理、文件系统、网络编程以及多线程等内容。这些知识点是Linux程序员必备的基础,对于提升软件开发的效率和质量至关重要。 首先,Linux系统...
在Linux环境下,Qt是一个强大的跨平台应用程序开发框架,它提供了丰富的图形用户界面工具包和网络编程接口。同时,libusb是一个开源库,用于与USB设备进行底层通信,它允许程序员直接控制USB设备,而无需依赖操作...
5. **编译和链接**:在Linux环境下,C和C++代码通常使用`gcc`或`g++`编译器进行编译。编译过程包括预处理、编译、汇编和链接。链接阶段会连接到所需的系统库,以实现特定的系统功能。 6. **调试和测试**:`gdb`是...
### Linux下C语言编程教程知识点概览 #### 第一章 基础知识 - **源程序编译**: 在Linux环境中使用GCC(GNU Compiler Collection)编译器进行C语言源程序的编译工作。GCC是一个功能强大的编译器,支持多种编程语言。...
在C语言中,通常使用gethostbyname等函数进行DNS解析,但在异步模式下,这些函数会导致阻塞。而libevent提供了非阻塞的API,可以在后台线程中进行DNS查询,当查询结果准备好时,再通知主线程。 epoll是Linux内核...
3. **ln**:创建文件的硬链接或软链接(符号链接)。 4. **uname**:显示系统的信息。 5. **date**:显示或设置系统的日期和时间。 6. **clear**:清空终端屏幕。 以上介绍的命令只是Linux系统中的一部分,随着...
10. **网络编程**:Linux下,`<sys/socket.h>`和`<netinet/in.h>`等头文件提供了网络编程接口,如创建套接字、连接服务器、发送和接收数据等。 11. **错误处理**:在C编程中,正确处理错误是关键。要学会检查函数...
"库的制作及使用.rar"可能涵盖了如何创建自定义库,以及如何在嵌入式系统中链接和使用这些库。这对于开发和复用文件I/O相关的功能模块至关重要。库可以封装复杂操作,简化程序设计,同时优化性能。 5. **实践应用*...
此外,文件系统部分会介绍文件和目录的操作,如open(), close(), read(), write(), mkdir(), rmdir()等,以及文件权限和硬链接、软链接的概念。对于需要处理文件存储和访问的开发者来说,这部分内容极具价值。 最后...
3. **Linux下的编译与链接**: - 使用GCC编译器编译C程序 - 链接静态库和动态库 - 编译选项与优化级别 4. **调试技术**: - 使用GDB进行程序调试 - 断点设置、变量查看、单步执行等基本操作 #### 三、Linux...
通过`plugin`这个文件名,我们可以推测这份资料可能包含有关动态插件或库的编程实践,这在Linux下通常涉及到动态链接和共享对象(.so文件)的使用。 进程和线程管理是另一个重点。Linux提供fork()和pthread_create...
Linux中的EXT4、XFS等文件系统的结构、挂载、卸载、文件权限、硬链接和软链接等知识是课程的重点。 5. **设备驱动**:设备驱动程序使操作系统能够控制硬件设备。理解I/O模型(如同步、异步、中断驱动I/O)以及编写...
rp-pppoe是由Ross Patterson创建的一个著名项目,它提供了在Linux上实现PPPoE服务和客户端功能的软件包。这个程序作为公司开发项目的一部分,可以作为一个优秀的参考模板,对于开发者来说,理解其工作原理和实现方式...
【Linux下C编程】主要涉及的是在Linux操作系统中进行C语言程序开发的相关知识。Linux是一种开源的操作系统,它为开发者提供了丰富的工具和环境来进行各种类型的编程,包括C语言。C编程在Linux环境下具有广泛的应用,...
本文将深入探讨Android与Linux平台下Socket通信的基础知识,包括Socket的工作原理、创建过程、连接步骤以及相关编程实践。 一、Socket工作原理 Socket源自Unix系统,它是一个编程接口(API),允许应用程序通过网络...
- **各种异步手段**:列举了Linux内核中的异步处理方法。 - **虚拟文件系统**:讲解了Linux的VFS(Virtual File System)模型。 - **网络协议栈各部分初始化** - **网络基础系统初始化**:涉及了网络子系统的初始...