int connect2server(unsigned int serverip, int fileid) { int conn_s; struct sockaddr_in servaddr; //short int port = SERV_PORT; extern short int serv_port; short int port = serv_port; int ret = 0; int sndsize = 1024*1024; extern double TB_RATE_AVG_INTERVAL; if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { fprintf(stderr, "CLNT: Error creating listening socket.\n"); return -1; } ret = setsockopt(conn_s, SOL_SOCKET, SO_SNDBUF, (char *)&sndsize, sizeof(int)); sndsize = 1024*1024; ret = setsockopt(conn_s, SOL_SOCKET, SO_RCVBUF, (char *)&sndsize, sizeof(int)); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); servaddr.sin_addr.s_addr = serverip; if (connect_nonb(conn_s, (struct sockaddr *)&servaddr, sizeof(servaddr), 5) < 0 ) { //printf("Cannot connect to server. Server may be busy; please try in a few minutes.\n"); return -1; } pnewclientpacket pkt; pkt.header.ptype = P_NEWCLIENT; pkt.header.length = 0; pkt.version = htonl(VERSION); pkt.fileid = 0; pkt.delta = TB_RATE_AVG_INTERVAL; writewrapper(conn_s, (char *)&pkt, sizeof(struct _newclientpkt)); pnewclientack pnewack; readwrapper(conn_s, (char *)&pnewack, sizeof(struct _newclientack)); if(pnewack.header.ptype != P_NEWCLIENT_ACK) { printf("Error: bad packet type: %d\n", pnewack.header.ptype); close(conn_s); return -1; } if(pnewack.compatibilityFlag == 0) { printf("Incompatible server. Please download the latest version of ShaperProbe client from:\nhttp://www.cc.gatech.edu/~partha/diffprobe/shaperprobe.html\n"); return -1; } return conn_s; }
int connect2server(unsigned int serverip, int fileid) { int conn_s; struct sockaddr_in servaddr; short int port = SERV_PORT; int ret = 0; int sndsize = 1024*1024; if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { fprintf(stderr, "CLNT: Error creating listening socket.\n"); return -1; } ret = setsockopt(conn_s, SOL_SOCKET, SO_SNDBUF, (char *)&sndsize, sizeof(int)); sndsize = 1024*1024; ret = setsockopt(conn_s, SOL_SOCKET, SO_RCVBUF, (char *)&sndsize, sizeof(int)); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); servaddr.sin_addr.s_addr = serverip; if (connect_nonb(conn_s, (struct sockaddr *)&servaddr, sizeof(servaddr), 5) < 0 ) { printf("Cannot connect to server. Server may be busy; please try in a few minutes.\n"); return -1; } pnewclientpacket pkt; pkt.header.ptype = P_NEWCLIENT; pkt.header.length = 0; pkt.version = 1; pkt.fileid = fileid; writewrapper(conn_s, (char *)&pkt, sizeof(struct _newclientpkt)); pnewclientack pnewack; readwrapper(conn_s, (char *)&pnewack, sizeof(struct _newclientack)); if(pnewack.header.ptype != P_NEWCLIENT_ACK) { printf("Error: bad packet type: %d\n", pnewack.header.ptype); close(conn_s); return -1; } if(pnewack.compatibilityFlag == 0) { printf("Incompatible server. Please download the latest version of DiffProbe client.\n"); return -1; } return conn_s; }
rtsp_ret_e ConnectServer (const char *host, int port) { int socket_type = SOCK_STREAM; struct sockaddr_in server; struct hostent *hp; char errbuf[ERRBUF_LEN]; memset(&server, 0, sizeof(server)); if (isalpha(host[0])) { /* server address is a name */ hp = gethostbyname(host); if (hp == NULL ) { VQEC_LOG_ERROR("ConnectServer:: Host %s not found!\n", host); return RTSP_FAILURE; } memcpy(&(server.sin_addr), hp->h_addr, hp->h_length); server.sin_family = hp->h_addrtype; } else { /* Simply just use it */ if (inet_aton(host, &(server.sin_addr)) == 0) { VQEC_LOG_ERROR("ConnectServer:: Invalid address %s is used!\n", host); return RTSP_FAILURE; } server.sin_family = AF_INET; } server.sin_port = htons(port); client.socket = socket(AF_INET, socket_type, 0); /* Open the socket */ if (client.socket < 0) { VQEC_LOG_ERROR("ConnectServer:: Could not open the socket!\n"); return RTSP_SOCKET_ERR; } if (connect_nonb(client.socket, (struct sockaddr*)&server, sizeof(server), RTSP_CLIENT_TCP_CONNECT_TIMEOUT_SECS) == SOCKET_ERROR) { VQEC_LOG_ERROR("ConnectServer:: Could not connect to the server " "%s! (connect error: %s)\n", host, strerror_r(errno, errbuf, ERRBUF_LEN)); return RTSP_CONNECT_ERR; } return RTSP_SUCCESS; }
int Ctcs::Connect() { ssize_t r; m_last_timestamp = now; if( _s2sin(m_host, m_port, &m_sin) < 0 ){ CONSOLE.Warning(2, "warn, get CTCS ip address failed."); return -1; } m_sock = socket(AF_INET, SOCK_STREAM, 0); if( INVALID_SOCKET == m_sock ) return -1; if( setfd_nonblock(m_sock) < 0 ){ CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; } r = connect_nonb(m_sock, (struct sockaddr *)&m_sin); if( r == -1 ){ CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; }else if( r == -2 ){ m_status = DT_TRACKER_CONNECTING; }else{ m_status = DT_TRACKER_READY; if(*cfg_verbose) CONSOLE.Debug("Connected to CTCS"); if( Send_Protocol() != 0 && errno != EINPROGRESS ){ CONSOLE.Warning(2, "warn, send protocol to CTCS failed: %s", strerror(errno)); return -1; } if( Send_Auth() != 0 && errno != EINPROGRESS ){ CONSOLE.Warning(2, "warn, send password to CTCS failed: %s", strerror(errno)); return -1; } if( Send_Torrent(BTCONTENT.GetPeerId(), BTCONTENT.GetMetainfoFile()) < 0 && errno != EINPROGRESS ){ CONSOLE.Warning(2, "warn, send torrent to CTCS failed: %s", strerror(errno)); return -1; } } return 0; }
void * send_request(void *arg){ int sockfd; int optval = 1; while(1){ sockfd = socket(AF_INET,SOCK_STREAM,0); if(sockfd <0){ perror("socket error"); pthread_exit(NULL); } int err = setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval)); if(err <0){ perror("setsockopt error"); pthread_exit(NULL); } int result ; if((result = connect_nonb(sockfd,(struct sockaddr*)&serv,sizeof(struct sockaddr_in),10))<0){ printf("result = %d\n",result); printf("connect timeout\n"); pthread_exit(NULL); } struct message *msg = (struct message*)arg; printf("send TCP_SERV message to server\n"); msg->msgtype = TCP_SERV; if(send(sockfd,(void*)msg,sizeof(struct message),0)!=sizeof(struct message)){ perror("send error!"); continue; } if(recv(sockfd,(void*)msg,sizeof(struct message),0)<0){ perror("recv error"); continue; } if(msg->msgtype == TCP_SERV_REPLY){ printf("visit the server success!\n"); }else if(msg->msgtype == TCP_SERV_FAULT){ printf("should try again\n"); }else{ printf("receive error\n"); } close(sockfd); } return NULL; }
int main(int argc, char **argv){ int sockFd, n; struct sockaddr_in serv_addr; char recvLine[MAXLINE +1]; if(argc != 2){ char error_msg[256]; sprintf(error_msg, "Usage: %s <IP Address>", argv[0]); error(error_msg); } sockFd = _Socket(AF_INET, SOCK_STREAM, 0); bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(9000); myLog("inet_pton"); if(inet_pton(AF_INET, argv[1], &serv_addr.sin_addr) <=0){ char error_msg[256]; sprintf(error_msg, "ERROR: inet_pton for %s", argv[1]); error(error_msg); } myLog("connecting"); // _Connect(sockFd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); int res; res = connect_nonb(sockFd, (struct sockaddr *) &serv_addr, sizeof(serv_addr), 0); printf("res=%d\n", res ); while((n=read(sockFd, recvLine, MAXLINE)) > 0){ recvLine[n] = 0; if(fputs(recvLine, stdout) == EOF) error("ERROR: fputs error"); } if(n<0) error("ERROR read"); return 0; }
static int lua__lcs_connect(lua_State *L) { int ret; struct sockaddr_in addr; sock_client_t * client = CHECK_CLIENT(L, 1); const char *addrstr = luaL_checkstring(L, 2); int port = luaL_checkinteger(L, 3); int timeout = luaL_optinteger(L, 4, 1000); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(addrstr); addr.sin_port = htons(port); /* ret = connect(client->fd, (struct sockaddr *)&addr, sizeof(addr)); */ ret = connect_nonb(client->fd, (const struct sockaddr *)&addr, sizeof(addr), timeout); if (ret != 0) { lua_pushboolean(L, 0); lua_pushfstring(L, "connect %s:%d failed", addrstr, port); return 2; } client->connected = 1; lua_pushboolean(L, 1); return 1; }
int btTracker::Connect() { ssize_t r; time(&m_last_timestamp); if (_s2sin(m_host, m_port, &m_sin) < 0) { CONSOLE.Warning(2, "warn, get tracker's ip address failed."); return -1; } m_sock = socket(AF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == m_sock) return -1; // we only need to bind if we have specified an ip // we need it to bind here before the connect!!!! if (cfg_listen_ip != 0) { struct sockaddr_in addr; // clear the struct as requested in the manpages memset(&addr, 0, sizeof(sockaddr_in)); // set the type addr.sin_family = AF_INET; // we want the system to choose port addr.sin_port = 0; // set the defined ip from the commandline addr.sin_addr.s_addr = cfg_listen_ip; // bind it or return... if (bind (m_sock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) != 0) { CONSOLE.Warning(1, "warn, can't set up tracker connection: %s", strerror(errno)); return -1; } } if (setfd_nonblock(m_sock) < 0) { CLOSE_SOCKET(m_sock); return -1; } r = connect_nonb(m_sock, (struct sockaddr *) &m_sin); if (r == -1) { CLOSE_SOCKET(m_sock); return -1; } else if (r == -2) m_status = T_CONNECTING; else { if (arg_verbose) CONSOLE.Debug("Connected to tracker"); if (0 == SendRequest()) m_status = T_READY; else { CLOSE_SOCKET(m_sock); return -1; } } return 0; }
int main(int argc, char* argv[]) { struct sigaction action; action.sa_handler = handle_pipe; sigemptyset(&action.sa_mask); action.sa_flags = 0; sigaction(SIGPIPE, &action, NULL); int sockconn; struct sockaddr_in servaddr; if ((sockconn = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { perror("socket failure"); exit(EXIT_FAILURE); } servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8888); if (inet_aton(argv[1], &servaddr.sin_addr) == 0) { perror("inet_aton error"); exit(EXIT_FAILURE); } if (connect_nonb(sockconn, (struct sockaddr*)&servaddr, sizeof(servaddr), 20) < 0) { perror("connnect error"); exit(EXIT_FAILURE); } fprintf(stderr, "connect success\n"); char c = getchar(); exit(EXIT_SUCCESS); //char recvbuf[1024] = {0}; //char sendbuf[1024] = {0}; //while(1){ // memset(recvbuf, 0, sizeof(recvbuf)); // memset(sendbuf, 0, sizeof(sendbuf)); // char * tmp = fgets(sendbuf, sizeof(sendbuf), stdin); // 键入EOF时,fgets返回一个空指针 // //fputs("fget from stdin\n", stderr); // if (tmp != NULL) // { // //fputs("write to socket\n", stderr); // // 如果服务器过早终止 当服务器tcp接受到来自客户的数据时,既然先前打开的那个套接口进程已经终止 // // 于是相应以一个RST, 通过使用tcpdump,来观察分组,我们可以验证该RST确实发送了 // // 然而客户端进程看不到这个RST,因为它在调用write后立即调用read,并且服务器已发送FIN,所调用的 // // read接收到FIN,立即返回0(表示EOF),我们的客户端未预期收到EOF,所以打印..server terminated prematurely // if (write(sockconn, sendbuf, strlen(sendbuf)) < 0) // { // perror("write to socket error"); // exit(EXIT_FAILURE); // } // } // else // 键入EOF时也返回空指针 // { // fputs("get EOF\n", stderr); // break; // } // //fputs("read from connfd\n", stderr); // int ret = read(sockconn, recvbuf, sizeof(recvbuf)); // if (ret != 0) // fputs(recvbuf, stdout); // else if (ret == 0) // 已经写往服务器了,所以应该收到数据,如果返回0,说明服务器已经过早终止了 // { // perror("str_cli: server terminated prematurely"); // exit(EXIT_FAILURE); // } // else // { // perror("read error"); // exit(EXIT_FAILURE); // } //} close(sockconn); // 这里即使不close,在进程关闭的时候,仍然会会关闭 return 0; }
void ASControl::client_func() { int sockfd=-1; int len; struct sockaddr_in dest; char buffer[MAXBUF + 1]; int myPort; HB4ASCTRL* hb_ptr; //int connect_c; struct timeval tva; fd_set inset, outset; int ret; myPort = selectTcpPort(reverseCfg(_localcfg.local_as));//clinet link to peer port /* 连接服务器 */ //connect_c = 0; while(1) { if(-1==sockfd) { for(int i=0; i<1; i++) { /* 创建一个 socket 用于 tcp 通信 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("C:Socket"); printf("C:Socket sterror:%s\n",strerror(errno)); exit(errno); } printf("C:socket created %d\n",sockfd); /* 初始化服务器端(对方)的地址和端口信息 */ bzero(&dest, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_port = htons(myPort); dest.sin_addr.s_addr = inet_addr(_localcfg.peer_ip); printf("C:address created,to connect %s,port %d.%s\n", inet_ntoa(dest.sin_addr), ntohs(dest.sin_port),timeStamp()); //added by wangxx 20120809 begin int optval=1; if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&optval, sizeof(optval))==-1) { close(sockfd); sockfd = -1; break; } //added by wangxx 20120809 end /* //deleted by wangxx 20120809 because 非阻塞模式会导致报错connect Operation already in progress //改用int connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec) 函数 unsigned long ul = 1; //设置为非阻塞模式 ioctl(sockfd, FIONBIO, &ul); */ //阻塞模式下,IP不存在,会168秒超时 //if (connect(sockfd, (struct sockaddr *) &dest, sizeof(dest)) < 0) //modified by wangxx 20120809 23:58 if(connect_nonb(sockfd, (struct sockaddr *)&dest, sizeof(dest), 3)) { //perror("C:Connect"); printf("C:Connect sterror:%s,retry 3s later\n",strerror(errno)); close(sockfd); sockfd=-1; sleep(3); break; } printf("C:server connected,%s\n",timeStamp()); } } if(-1!=sockfd) { for(int i=0; i<1; i++) { /* 接收对方发过来的消息,最多接收 MAXBUF 个字节 */ bzero(buffer, MAXBUF + 1); //sockfd 可读时才读 tva.tv_sec=3; tva.tv_usec=0; FD_ZERO(&inset); FD_SET(sockfd, &inset); ret = select(sockfd+1, &inset, NULL, NULL, &tva); if(-1 == ret) { sleep(1); //perror("C:select"); printf("C:inset select sterror:%s\n",strerror(errno)); continue; } else if(0 == ret) { printf("C:none hb arrive in 3 seconds,need reconnect\n"); close(sockfd); sockfd=-1; break; } /* 接收服务器来的消息 */ len = recv(sockfd, buffer, MAXBUF, 0); if(len > 0) { //printf("C:接收消息成功:'%s',共%d个字节的数据\n", buffer, len); } else { printf("C:消息接收失败!错误代码是%d,错误信息是'%s'\n", errno, strerror(errno)); close(sockfd); sockfd=-1; break; } //sockfd 可写时才写added by wangxx 20120810 1:02 begin tva.tv_sec=3; tva.tv_usec=0; FD_ZERO(&outset); FD_SET(sockfd, &outset); ret = select(sockfd+1, NULL, &outset, NULL, &tva); if(-1 == ret) { sleep(1); //perror("C:select"); printf("C:outset select sterror:%s\n",strerror(errno)); continue; } else if(0 == ret) { printf("C:sockfd can't be written in 3 seconds, need reconnect\n"); close(sockfd); sockfd=-1; break; } //sockfd 可写时才写added by wangxx 20120810 1:02 end /*send hb reply,report STATUS*/ hb_ptr=(HB4ASCTRL* )buffer; hb_ptr->header = ASHB_HDR; hb_ptr->invoke = HB_REPLY; hb_ptr->board_as = _curr_as; hb_ptr->dnar_alive=_dnar_status; len = send(sockfd, (void*)buffer, sizeof(HB4ASCTRL), 0); if(len < 0) { printf("C:消息'%s'发送失败!错误代码是%d,错误信息是'%s'\n", buffer, errno, strerror(errno)); close(sockfd); sockfd=-1; break; } else { //printf("C:消息'%s'发送成功,共发送了%d个字节!\n", buffer, len); } } } } /* 关闭连接 */ close(sockfd); sockfd=-1; }
int btTracker::Connect() { struct sockaddr_in sin; ssize_t r; m_result = DT_NORMAL; m_last_timestamp = now; if( _s2sin(m_spec->host, m_spec->port, &sin) < 0 ){ CONSOLE.Warning(2, "warn, get tracker's ip address failed."); return -1; } m_sock = socket(AF_INET, SOCK_STREAM, 0); if( INVALID_SOCKET == m_sock ){ CONSOLE.Warning(2, "warn, tracker socket allocation failed: %s", strerror(errno)); return -1; } /* we only need to bind if we have specified an ip we need it to bind here before the connect! */ if( *cfg_listen_ip != 0 ){ struct sockaddr_in addr; // clear the struct as requested in the manpages memset(&addr, 0, sizeof(sockaddr_in)); // set the type addr.sin_family = AF_INET; // we want the system to choose port addr.sin_port = 0; // set the defined ip from the commandline addr.sin_addr.s_addr = *cfg_listen_ip; // bind it or return... if( bind(m_sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) != 0 ){ CONSOLE.Warning(1, "warn, can't set up tracker connection: %s", strerror(errno)); return -1; } } if( setfd_nonblock(m_sock) < 0 ){ CONSOLE.Warning(2, "warn, tracker socket setup failed: %s", strerror(errno)); CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; } r = connect_nonb(m_sock, (struct sockaddr *)&sin); if( r == -1 ){ CONSOLE.Warning(2, "warn, connect to tracker at %s failed: %s", m_spec->url, strerror(errno)); CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; }else if( r == -2 ){ if(*cfg_verbose) CONSOLE.Debug("Connecting to tracker at %s", m_spec->url); m_status = DT_TRACKER_CONNECTING; }else{ if(*cfg_verbose) CONSOLE.Debug("Connected to tracker at %s", m_spec->url); if( 0 == SendRequest() ) m_status = DT_TRACKER_READY; else{ CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; } } return 0; }