[...] void SendPositive(SOCKET to_sock, SOCKET about_sock) { SOCKADDR_IN name; int len; BYTE Buffer[10] = {5, 0, 0, 1}; len = sizeof(name); getsockname(about_sock, (SOCKADDR*)&name, &len); memcpy(&Buffer[4], &name.sin_addr.S_un.S_addr, 4); memcpy(&Buffer[8], &name.sin_port, 2); send(to_sock, Buffer, 10, 0); } [...] target_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); switch(Buffer[1]) { case 1: puts("CONNECT"); if(!connect(target_sock, (SOCKADDR*)&target_addr, sizeof(target_addr))) { SendPositive(sock, target_sock); SockToSock(sock, target_sock); } break; case 2: puts("BIND"); if(bind(target_sock, (SOCKADDR*)&target_addr, sizeof(target_addr)) && listen(target_sock, 16)) { [...]