bool CSocket::tcpconnect(char *address, int port, int mode) { SOCKADDR_IN addr; LPHOSTENT hostEntry; if ((sockid = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == SOCKET_ERROR) return false; if ((hostEntry = gethostbyname(address))==NULL) { closesocket(sockid); return false; } addr.sin_family = AF_INET; addr.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list); addr.sin_port = htons((u_short)port); if (mode ==2) setsync(1); if (connect(sockid, (LPSOCKADDR)&addr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) if(WSAGetLastError() != WSAEWOULDBLOCK) { closesocket(sockid); return false; } if (mode ==1) setsync(1); return true; }
bool CSocket::tcpconnect(char *address, int port, int mode) { SOCKADDR_IN addr; LPHOSTENT hostEntry; if((sockid = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == SOCKET_ERROR) return false; if((hostEntry = gethostbyname(address))==NULL) { close(sockid); return false; } //..Fill out addres addr.sin_family = AF_INET; // ... FIX THIS //addr.sin_addr = hostEntry->h_addr ; // struct in_addr sin_addr; // see struct in_addr, below GetIp bcopy((char *)hostEntry->h_addr,(char *)&addr.sin_addr.s_addr,hostEntry->h_length); addr.sin_port = htons((u_short)port); if(mode ==2)setsync(1); //...Connect socket int rc = connect(sockid, (struct sockaddr *)&addr, sizeof(addr)); if(rc == SOCKET_ERROR) { if(errno == EWOULDBLOCK) { close(sockid); return false; } } if(mode ==1)setsync(1); proc = TCP_CONNECT; return true; }
bool CSocket::udpconnectmcast( char* multicast , int port , int mode ){ //...Create socket if((sockid = socket(AF_INET, SOCK_DGRAM, 0)) == SOCKET_ERROR) return false; u_int reuse = 0; if (setsockopt(sockid,SOL_SOCKET,SO_REUSEADDR, &reuse, sizeof(u_int) ) < 0) { return false; } /* set up destination address */ memset(&udpAddr,0,sizeof(udpAddr)); udpAddr.sin_family = AF_INET; udpAddr.sin_addr.s_addr = inet_addr ( multicast ); udpAddr.sin_port = htons(port); if(mode)setsync(1); /* bind to receive address */ if (bind(sockid,(struct sockaddr *) &udpAddr,sizeof(udpAddr)) < 0) { return false; } /* use setsockopt() to request that the kernel join a multicast group */ mAddr.imr_multiaddr.s_addr=inet_addr ( multicast ); mAddr.imr_interface.s_addr=htonl( INADDR_ANY ); //...Join membership if (setsockopt(sockid,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mAddr,sizeof(mAddr)) < 0) { return false; } proc = UDP_MULTICAST; return true; }
bool CSocket::tcpconnect(char *address, int port, int mode) { sockaddr_in addr; hostent* hostEntry; if((sockid = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR) return false; if((hostEntry = gethostbyname(address)) == NULL) { closesocket(sockid); return false; } addr.sin_family = AF_INET; bcopy ( hostEntry->h_addr, &(addr.sin_addr.s_addr), hostEntry->h_length); addr.sin_port = htons((u_short)port); if(mode ==2)setsync(1); if(connect(sockid, (struct sockaddr*)&addr, sizeof(sockaddr)) == SOCKET_ERROR) { closesocket(sockid); return false; } if(mode ==1)setsync(1); return true; }
bool CSocket::udpconnect(int port, int mode) { SOCKADDR_IN addr; if ((sockid = socket(AF_INET, SOCK_DGRAM, 0)) == SOCKET_ERROR) return false; addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(port); if(mode)setsync(1); if(bind(sockid,(SOCKADDR *)&addr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) { closesocket(sockid); return false; } udp = true; return true; }
bool CSocket::tcplisten(int port, int max, int mode) { if ((sockid = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) return false; SOCKADDR_IN addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(port); if (mode) setsync(1); if (bind(sockid, (LPSOCKADDR)&addr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) { closesocket(sockid); return false; } if (listen(sockid, max) == SOCKET_ERROR) { closesocket(sockid); return false; } return true; }