// 090706 by HG EXPORT void libqq_sethttpproxy( struct qqclient* qq, char* ip, ushort port ) { struct sockaddr_in addr; qq->network = PROXY_HTTP; netaddr_set( ip, &addr ); qq->proxy_server_ip = ntohl( addr.sin_addr.s_addr ); qq->proxy_server_port = port; }
//Create a socket TCP or UDP int qqsocket_create( int type, char* ip, ushort port ) { int fd = 0; struct sockaddr_in addr; switch( type ) { case TCP: fd = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP ); memset( &addr, 0, sizeof(struct sockaddr_in) ); addr.sin_family = PF_INET; if( ip ) netaddr_set( ip, &addr ); //addr.sin_addr.s_addr = inet_addr( ip ); else addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons( port ); if( bind( fd, (struct sockaddr*)&addr, sizeof(struct sockaddr_in) ) < 0 ) { DBG("bind tcp socket error!"); close( fd ); return -1; } break; case UDP: fd = socket( PF_INET, SOCK_DGRAM, IPPROTO_IP ); memset( &addr, 0, sizeof(struct sockaddr) ); addr.sin_family = PF_INET; if( ip ) netaddr_set( ip, &addr ); //addr.sin_addr.s_addr = inet_addr( ip ); else addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons( port ); if( bind( fd, (struct sockaddr*)&addr, sizeof(struct sockaddr_in) ) < 0 ) { DBG("bind udp socket error!"); close( fd ); return -1; } break; } return fd; }
//connect a socket to remote server int qqsocket_connect( int fd, char* ip, ushort port ) { struct sockaddr_in addr; memset( &addr, 0, sizeof(struct sockaddr_in) ); addr.sin_family = PF_INET; netaddr_set( ip, &addr ); addr.sin_port = htons( port ); if( connect( fd, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)) < 0 ) { DBG("qqsocket connect failed."); return -1; } return 0; }