void ConnectionGraph::OnConnectionGraphRequest(Packet *packet) { char password[256]; RakNet::BitStream inBitstream(packet->data, packet->length, false); inBitstream.IgnoreBits(8); stringCompressor->DecodeString(password,256,&inBitstream); if (pw && pw[0] && strcmp(pw, password)!=0) return; #ifdef _CONNECTION_GRAPH_DEBUG_PRINT RAKNET_DEBUG_PRINTF("ID_CONNECTION_GRAPH_REPLY "); #endif RakNet::BitStream outBitstream; outBitstream.Write((MessageID)ID_CONNECTION_GRAPH_REPLY); stringCompressor->EncodeString(pw,256,&outBitstream); SerializeWeightedGraph(&outBitstream, graph); SendUnified(&outBitstream, LOW_PRIORITY, RELIABLE_ORDERED, connectionGraphChannel, packet->systemAddress, false); #ifdef _CONNECTION_GRAPH_DEBUG_PRINT RAKNET_DEBUG_PRINTF("from %i to %i\n", peer->GetInternalID().port, packet->systemAddress.port); #endif // Add packet->systemAddress to the participant list if it is not already there AddParticipant(packet->systemAddress); }
bool TelnetTransport::ReassembleLine(TelnetTransport::TelnetClient* remoteClient, unsigned char c) { if (c=='\n') { remoteClient->textInput[remoteClient->cursorPosition]=0; remoteClient->cursorPosition=0; #ifdef _PRINTF_DEBUG RAKNET_DEBUG_PRINTF("[Done] %s\n", remoteClient->textInput); #endif return true; } else if (c==8) // backspace { if (remoteClient->cursorPosition>0) { remoteClient->textInput[--remoteClient->cursorPosition]=0; #ifdef _PRINTF_DEBUG RAKNET_DEBUG_PRINTF("[Back] %s\n", remoteClient->textInput); #endif } } else if (c>=32 && c <127) { if (remoteClient->cursorPosition < REMOTE_MAX_TEXT_INPUT) { remoteClient->textInput[remoteClient->cursorPosition++]=c; #ifdef _PRINTF_DEBUG RAKNET_DEBUG_PRINTF("[Norm] %s\n", remoteClient->textInput); #endif } } return false; }
int SocketLayer::SendToTTL( SOCKET s, const char *data, int length, const char ip[ 16 ], unsigned short port, int ttl ) { unsigned int binaryAddress; binaryAddress = inet_addr( ip ); SystemAddress sa(binaryAddress,port); if (slo) return slo->RakNetSendTo(s,data,length,sa); #if !defined(_XBOX) && !defined(X360) int oldTTL; socklen_t opLen=sizeof(oldTTL); // Get the current TTL if (getsockopt(s, IPPROTO_IP, IP_TTL, ( char * ) & oldTTL, &opLen ) == -1) { #if defined(_WIN32) && defined(_DEBUG) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "getsockopt(IPPROTO_IP,IP_TTL) failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif } // Set to TTL int newTTL=ttl; if (setsockopt(s, IPPROTO_IP, IP_TTL, ( char * ) & newTTL, sizeof ( newTTL ) ) == -1) { #if defined(_WIN32) && defined(_DEBUG) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "setsockopt(IPPROTO_IP,IP_TTL) failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif } // Send int res = SendTo(s,data,length,ip,port,false); // Restore the old TTL setsockopt(s, IPPROTO_IP, IP_TTL, ( char * ) & oldTTL, opLen ); return res; #else return 0; #endif }
void GetMyIP_Win32( char ipList[ MAXIMUM_NUMBER_OF_INTERNAL_IDS ][ 16 ], unsigned int binaryAddresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] ) { char ac[ 80 ]; if ( gethostname( ac, sizeof( ac ) ) == -1 ) { DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "gethostname failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); return ; } struct hostent *phe = gethostbyname( ac ); if ( phe == 0 ) { DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "gethostbyname failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); return ; } struct in_addr addr[ MAXIMUM_NUMBER_OF_INTERNAL_IDS ]; int idx; for ( idx = 0; idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; ++idx ) { if (phe->h_addr_list[ idx ] == 0) break; memcpy( &addr[idx], phe->h_addr_list[ idx ], sizeof( struct in_addr ) ); binaryAddresses[idx]=addr[idx].S_un.S_addr; strcpy( ipList[ idx ], inet_ntoa( addr[idx] ) ); } for ( ; idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; ++idx ) { ipList[idx][0]=0; } }
void ConnectionGraph::SerializeWeightedGraph(RakNet::BitStream *out, const DataStructures::WeightedGraph<ConnectionGraph::SystemAddressAndGroupId, unsigned short, false> &g) const { unsigned nodeIndex, connectionIndex; BitSize_t countOffset, oldOffset; unsigned short count; SystemAddressAndGroupId node1, node2; unsigned short weight; out->WriteCompressed(g.GetNodeCount()); for (nodeIndex=0; nodeIndex < g.GetNodeCount(); nodeIndex++) { // Write the node node1=g.GetNodeAtIndex(nodeIndex); #ifdef _CONNECTION_GRAPH_DEBUG_PRINT RAKNET_DEBUG_PRINTF("[%i] ", node1.systemAddress.port); #endif out->Write(node1.systemAddress); out->Write(node1.groupId); out->Write(node1.guid); // Write the adjacency list count count=(unsigned short)g.GetConnectionCount(nodeIndex); out->AlignWriteToByteBoundary(); countOffset=out->GetWriteOffset(); out->Write(count); count=0; for (connectionIndex=0; connectionIndex < g.GetConnectionCount(nodeIndex); connectionIndex++) { g.GetConnectionAtIndex(nodeIndex, connectionIndex, node2, weight); // For efficiencies' sake, only serialize the upper half of the connection pairs if (node2 > node1) { count++; out->Write(node2.systemAddress); out->Write(node2.groupId); out->Write(node2.guid); out->Write(weight); #ifdef _CONNECTION_GRAPH_DEBUG_PRINT RAKNET_DEBUG_PRINTF("(%i) ", node2.systemAddress.port); #endif } } // Go back and change how many elements were written oldOffset=out->GetWriteOffset(); out->SetWriteOffset(countOffset); out->Write(count); out->SetWriteOffset(oldOffset); } }
SOCKET SocketLayer::Connect( SOCKET writeSocket, unsigned int binaryAddress, unsigned short port ) { RakAssert( writeSocket != (SOCKET) -1 ); sockaddr_in connectSocketAddress; connectSocketAddress.sin_family = AF_INET; connectSocketAddress.sin_port = htons( port ); connectSocketAddress.sin_addr.s_addr = binaryAddress; if ( connect( writeSocket, ( struct sockaddr * ) & connectSocketAddress, sizeof( struct sockaddr ) ) != 0 ) { #if defined(_WIN32) && !defined(_XBOX) && defined(_DEBUG) && !defined(X360) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) &messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "WSAConnect failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif } return writeSocket; }
void WSAStartupSingleton::AddRef(void) { #if defined(_WIN32) && !defined(WINDOWS_STORE_RT) refCount++; if (refCount!=1) return; WSADATA winsockInfo; if ( WSAStartup( MAKEWORD( 2, 2 ), &winsockInfo ) != 0 ) { #if defined(_DEBUG) && !defined(WINDOWS_PHONE_8) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "WSAStartup failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif } #endif }
void FileList::DeleteFiles(const char *applicationDirectory) { char fullPath[512]; unsigned i,j; for (i=0; i < fileList.Size(); i++) { // The filename should not have .. in the path - if it does ignore it for (j=1; j < fileList[i].filename.GetLength(); j++) { if (fileList[i].filename[j]=='.' && fileList[i].filename[j-1]=='.') { #ifdef _DEBUG RakAssert(0); #endif // Just cancel the deletion entirely return; } } strcpy(fullPath, applicationDirectory); FixEndingSlash(fullPath); strcat(fullPath, fileList[i].filename.C_String()); #ifdef _MSC_VER #pragma warning( disable : 4966 ) // unlink declared deprecated by Microsoft in order to make it harder to be cross platform. I don't agree it's deprecated. #endif int result = unlink(fullPath); if (result!=0) { RAKNET_DEBUG_PRINTF("FileList::DeleteFiles: unlink (%s) failed.\n", fullPath); } } }
void SocketLayer::SetDoNotFragment( SOCKET listenSocket, int opt ) { #if defined(IP_DONTFRAGMENT ) #if defined(_WIN32) && !defined(_XBOX) && defined(_DEBUG) && !defined(X360) // If this assert hit you improperly linked against WSock32.h RakAssert(IP_DONTFRAGMENT==14); #endif if ( setsockopt( listenSocket, IPPROTO_IP, IP_DONTFRAGMENT, ( char * ) & opt, sizeof ( opt ) ) == -1 ) { #if defined(_WIN32) && defined(_DEBUG) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); RAKNET_DEBUG_PRINTF( "setsockopt(IP_DONTFRAGMENT) failed:Error code - %d\n%s", dwIOError, messageBuffer ); LocalFree( messageBuffer ); #endif } #endif }
SystemAddress SocketLayer::GetSystemAddress ( SOCKET s ) { sockaddr_in sa; socklen_t len = sizeof(sa); if (getsockname(s, (sockaddr*)&sa, &len)!=0) { #if defined(_WIN32) && !defined(_XBOX) && !defined(X360) && defined(_DEBUG) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "getsockname failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif return UNASSIGNED_SYSTEM_ADDRESS; } SystemAddress out; out.port=ntohs(sa.sin_port); out.binaryAddress=sa.sin_addr.s_addr; return out; }
void RNS2_Berkley::GetSystemAddressIPV4And6 ( RNS2Socket rns2Socket, SystemAddress *systemAddressOut ) { #if RAKNET_SUPPORT_IPV6==1 socklen_t slen; sockaddr_storage ss; slen = sizeof(ss); if ( getsockname__(rns2Socket, (struct sockaddr *)&ss, &slen)!=0) { #if defined(_WIN32) && defined(_DEBUG) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "getsockname failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif systemAddressOut->FromString(0); return; } if (ss.ss_family==AF_INET) { memcpy(&systemAddressOut->address.addr4,(sockaddr_in *)&ss,sizeof(sockaddr_in)); systemAddressOut->debugPort=ntohs(systemAddressOut->address.addr4.sin_port); uint32_t zero = 0; if (memcmp(&systemAddressOut->address.addr4.sin_addr.s_addr, &zero, sizeof(zero))==0) systemAddressOut->SetToLoopback(4); // systemAddressOut->address.addr4.sin_port=ntohs(systemAddressOut->address.addr4.sin_port); } else { memcpy(&systemAddressOut->address.addr6,(sockaddr_in6 *)&ss,sizeof(sockaddr_in6)); systemAddressOut->debugPort=ntohs(systemAddressOut->address.addr6.sin6_port); char zero[16]; memset(zero,0,sizeof(zero)); if (memcmp(&systemAddressOut->address.addr4.sin_addr.s_addr, &zero, sizeof(zero))==0) systemAddressOut->SetToLoopback(6); // systemAddressOut->address.addr6.sin6_port=ntohs(systemAddressOut->address.addr6.sin6_port); } #else (void) rns2Socket; (void) systemAddressOut; return; #endif }
void ConnectionGraph::OnConnectionGraphReply(Packet *packet) { unsigned char password[256]; RakNet::BitStream inBitstream(packet->data, packet->length, false); inBitstream.IgnoreBits(8); stringCompressor->DecodeString((char*)password,256,&inBitstream); if (pw && pw[0] && strcmp(pw, (const char*)password)!=0) return; // Serialize the weighted graph and send it to them RakNet::BitStream outBitstream; outBitstream.Write((MessageID)ID_CONNECTION_GRAPH_UPDATE); #ifdef _CONNECTION_GRAPH_DEBUG_PRINT RAKNET_DEBUG_PRINTF("ID_CONNECTION_GRAPH_UPDATE "); #endif // Send our current graph to the sender SerializeWeightedGraph(&outBitstream, graph); // Write the systems that have processed this graph so we don't resend to these systems outBitstream.Write((unsigned short) 1); outBitstream.Write(rakPeerInterface->GetExternalID(packet->systemAddress)); #ifdef _CONNECTION_GRAPH_DEBUG_PRINT RAKNET_DEBUG_PRINTF("from %i to %i\n", peer->GetInternalID().port, packet->systemAddress.port); #endif SendUnified(&outBitstream, LOW_PRIORITY, RELIABLE_ORDERED, connectionGraphChannel, packet->systemAddress, false); // Add packet->systemAddress to the participant list if it is not already there AddParticipant(packet->systemAddress); if (DeserializeWeightedGraph(&inBitstream, rakPeerInterface)==false) return; // Forward the updated graph to all current participants DataStructures::OrderedList<SystemAddress,SystemAddress> ignoreList; ignoreList.Insert(packet->systemAddress,packet->systemAddress, true, __FILE__, __LINE__); BroadcastGraphUpdate(ignoreList, rakPeerInterface); }
void ConnectionGraph::RequestConnectionGraph(SystemAddress systemAddress) { RakNet::BitStream outBitstream; outBitstream.Write((MessageID)ID_CONNECTION_GRAPH_REQUEST); stringCompressor->EncodeString(pw,256,&outBitstream); rakPeerInterface->Send(&outBitstream, LOW_PRIORITY, RELIABLE_ORDERED, connectionGraphChannel, systemAddress, false); #ifdef _CONNECTION_GRAPH_DEBUG_PRINT RAKNET_DEBUG_PRINTF("ID_CONNECTION_GRAPH_REQUEST from %i to %i\n", peer->GetInternalID().port, systemAddress.port); #endif }
void Router::SendTree(PacketPriority priority, PacketReliability reliability, char orderingChannel, DataStructures::Tree<ConnectionGraph::SystemAddressAndGroupId> *tree, const char *data, BitSize_t bitLength, RakNet::BitStream *out, SystemAddressList *recipients) { BitSize_t outputOffset; // Write routing identifer out->Write((MessageID)ID_ROUTE_AND_MULTICAST); // Write the send parameters out->WriteCompressed((unsigned char)priority); out->WriteCompressed((unsigned char)reliability); out->WriteCompressed((unsigned char)orderingChannel); // Write the user payload length out->Write((unsigned int)bitLength); // out->PrintBits(); // payload->PrintBits(); out->AlignWriteToByteBoundary(); // payload->AlignReadToByteBoundary(); // out->Write(payload, payload->GetNumberOfUnreadBits()); // out->PrintBits(); if ((bitLength % 8)==0) out->Write(data, BITS_TO_BYTES(bitLength)); else out->WriteBits((const unsigned char*)data, bitLength, false); // Save where to start writing per-system data outputOffset=out->GetWriteOffset(); // Write every child of the root of the tree (SystemAddress, isRecipient, branch) unsigned i; for (i=0; i < tree->children.Size(); i++) { // Start writing at the per-system data byte out->SetWriteOffset(outputOffset); // Write our external IP to designate the sender out->Write(rakPeerInterface->GetExternalID(tree->children[i]->data.systemAddress)); // Serialize the tree SerializePreorder(tree->children[i], out, recipients); // Send to the first hop #ifdef _DO_PRINTF RAKNET_DEBUG_PRINTF("%i sending to %i\n", rakPeerInterface->GetExternalID(tree->children[i]->data.systemAddress).port, tree->children[i]->data.systemAddress.port); #endif SendUnified(out, priority, reliability, orderingChannel, tree->children[i]->data.systemAddress, false); } }
RNS2SendResult RNS2_Windows_Linux_360::Send_Windows_Linux_360NoVDP( RNS2Socket rns2Socket, RNS2_SendParameters *sendParameters, const char *file, unsigned int line ) { int len=0; do { (void) file; (void) line; int oldTTL=-1; if (sendParameters->ttl>0) { socklen_t opLen=sizeof(oldTTL); // Get the current TTL if (getsockopt__(rns2Socket, sendParameters->systemAddress.GetIPPROTO(), IP_TTL, ( char * ) & oldTTL, &opLen ) != -1) { int newTTL=sendParameters->ttl; setsockopt__(rns2Socket, sendParameters->systemAddress.GetIPPROTO(), IP_TTL, ( char * ) & newTTL, sizeof ( newTTL ) ); } } if (sendParameters->systemAddress.address.addr4.sin_family==AF_INET) { len = sendto__( rns2Socket, sendParameters->data, sendParameters->length, 0, ( const sockaddr* ) & sendParameters->systemAddress.address.addr4, sizeof( sockaddr_in ) ); } else { #if RAKNET_SUPPORT_IPV6==1 len = sendto__( rns2Socket, sendParameters->data, sendParameters->length, 0, ( const sockaddr* ) & sendParameters->systemAddress.address.addr6, sizeof( sockaddr_in6 ) ); #endif } if (len<0) { RAKNET_DEBUG_PRINTF("sendto failed with code %i for char %i and length %i.\n", len, sendParameters->data[0], sendParameters->length); } if (oldTTL!=-1) { setsockopt__(rns2Socket, sendParameters->systemAddress.GetIPPROTO(), IP_TTL, ( char * ) & oldTTL, sizeof ( oldTTL ) ); } } while ( len == 0 ); return len; }
void RNS2_NativeClient::onSendTo(void* pData, int32_t dataSize) { if(dataSize <= 0) RAKNET_DEBUG_PRINTF("onSendTo: send failed with error %d\n", dataSize); RNS2_SendParameters_NativeClient *sp = (RNS2_SendParameters_NativeClient*) pData; // Caller will check sendInProgress to send again if needed sp->socket2->sendInProgressMutex.Lock(); sp->socket2->sendInProgress=false; sp->socket2->sendInProgressMutex.Unlock(); DeallocSP(sp); // if(dataSize == PP_ERROR_ABORTED) // return; }
void RNS2_NativeClient::onSocketBound(void* pData, int32_t dataSize) { RAKNET_DEBUG_PRINTF("onSocketBound ==> %d\n", dataSize); RNS2_NativeClient *csc = (RNS2_NativeClient *)pData; //any error codes will be given to us in the dataSize value if(dataSize < 0) { csc->bindState=BS_FAILED; fprintf(stderr,"onSocketBound exiting, dataSize = %d\n", dataSize); return; } csc->bindState=BS_BOUND; csc->ProcessBufferedSend(); csc->IssueReceiveCall(); }
int _findnext(long h, _finddata_t *f) { RakAssert(h >= 0 && h < (long)fileInfo.Size()); if (h < 0 || h >= (long)fileInfo.Size()) return -1; _findinfo_t* fi = fileInfo[h]; while(true) { dirent* entry = readdir(fi->openedDir); if(entry == 0) return -1; // Only report stuff matching our filter if (fnmatch(fi->filter, entry->d_name, FNM_PATHNAME) != 0) continue; // To reliably determine the entry's type, we must do // a stat... don't rely on entry->d_type, as this // might be unavailable! struct stat filestat; RakNet::RakString fullPath = fi->dirName + entry->d_name; if (stat(fullPath, &filestat) != 0) { RAKNET_DEBUG_PRINTF("Cannot stat %s\n", fullPath.C_String()); continue; } if (S_ISREG(filestat.st_mode)) { f->attrib = _A_NORMAL; } else if (S_ISDIR(filestat.st_mode)) { f->attrib = _A_SUBDIR; } else continue; // We are interested in files and // directories only. Links currently // are not supported. f->size = filestat.st_size; strncpy(f->name, entry->d_name, STRING_BUFFER_SIZE); return 0; } return -1; }
int SocketLayer::SendTo_PC( SOCKET s, const char *data, int length, unsigned int binaryAddress, unsigned short port ) { sockaddr_in sa; sa.sin_port = htons( port ); // User port sa.sin_addr.s_addr = binaryAddress; sa.sin_family = AF_INET; int len=0; do { len = sendto( s, data, length, 0, ( const sockaddr* ) & sa, sizeof( sa ) ); if (len<0) { #if defined(_WIN32) && !defined(_XBOX) && defined(_DEBUG) && !defined(X360) DWORD dwIOError = GetLastError(); if (dwIOError!= 10040 && dwIOError != WSAEADDRNOTAVAIL) { LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) &messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "SendTo_PC failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); } else { // buffer size exceeded return -10040; } #endif printf("sendto failed with code %i for char %i and length %i.\n", len, data[0], length); } #if defined(_DEBUG) printf("Sent %d bytes to port %d\n", len, port); #endif } while ( len == 0 ); return len; }
RNS2BindResult RNS2_Berkley::BindSharedIPV4( RNS2_BerkleyBindParameters *bindParameters, const char *file, unsigned int line ) { (void) file; (void) line; int ret; memset(&boundAddress.address.addr4,0,sizeof(sockaddr_in)); boundAddress.address.addr4.sin_port = htons( bindParameters->port ); rns2Socket = (int) socket__( bindParameters->addressFamily, bindParameters->type, bindParameters->protocol ); if (rns2Socket == -1) return BR_FAILED_TO_BIND_SOCKET; SetSocketOptions(); SetNonBlockingSocket(bindParameters->nonBlockingSocket); SetBroadcastSocket(bindParameters->setBroadcast); // Fill in the rest of the address structure boundAddress.address.addr4.sin_family = AF_INET; if (bindParameters->hostAddress && bindParameters->hostAddress[0]) { boundAddress.address.addr4.sin_addr.s_addr = inet_addr__( bindParameters->hostAddress ); } else { // RAKNET_DEBUG_PRINTF("Binding any on port %i\n", port); boundAddress.address.addr4.sin_addr.s_addr = INADDR_ANY; } // bind our name to the socket ret = bind__( rns2Socket, ( struct sockaddr * ) &boundAddress.address.addr4, sizeof( boundAddress.address.addr4 ) ); if ( ret <= -1 ) { #if defined(_WIN32) closesocket__(rns2Socket); return BR_FAILED_TO_BIND_SOCKET; #elif (defined(__GNUC__) || defined(__GCCXML__) ) && !defined(_WIN32) closesocket__(rns2Socket); switch (ret) { case EBADF: RAKNET_DEBUG_PRINTF("bind__(): sockfd is not a valid descriptor.\n"); break; case ENOTSOCK: RAKNET_DEBUG_PRINTF("bind__(): Argument is a descriptor for a file, not a socket.\n"); break; case EINVAL: RAKNET_DEBUG_PRINTF("bind__(): The addrlen is wrong, or the socket was not in the AF_UNIX family.\n"); break; case EROFS: RAKNET_DEBUG_PRINTF("bind__(): The socket inode would reside on a read-only file system.\n"); break; case EFAULT: RAKNET_DEBUG_PRINTF("bind__(): my_addr points outside the user's accessible address space.\n"); break; case ENAMETOOLONG: RAKNET_DEBUG_PRINTF("bind__(): my_addr is too long.\n"); break; case ENOENT: RAKNET_DEBUG_PRINTF("bind__(): The file does not exist.\n"); break; case ENOMEM: RAKNET_DEBUG_PRINTF("bind__(): Insufficient kernel memory was available.\n"); break; case ENOTDIR: RAKNET_DEBUG_PRINTF("bind__(): A component of the path prefix is not a directory.\n"); break; case EACCES: RAKNET_DEBUG_PRINTF("bind__(): Search permission is denied on a component of the path prefix.\n"); break; case ELOOP: RAKNET_DEBUG_PRINTF("bind__(): Too many symbolic links were encountered in resolving my_addr.\n"); break; default: RAKNET_DEBUG_PRINTF("Unknown bind__() error %i.\n", ret); break; } #endif return BR_FAILED_TO_BIND_SOCKET; } GetSystemAddressIPV4(rns2Socket, &boundAddress ); return BR_SUCCESS; }
/// Called for each directory, when that directory begins processing void FLP_Printf::OnDirectory(FileList *fileList, char *dir, unsigned int directoriesRemaining) { (void) fileList; RAKNET_DEBUG_PRINTF("Adding %s. %i remaining.\n", dir, directoriesRemaining);}
/// First callback called when FileList::AddFilesFromDirectory() starts void FLP_Printf::OnAddFilesFromDirectoryStarted(FileList *fileList, char *dir) { (void) fileList; RAKNET_DEBUG_PRINTF("Adding files from directory %s\n",dir);}
virtual void OnSendAborted( RakNet::SystemAddress systemAddress ) { char str[32]; systemAddress.ToString(true, (char*) str); RAKNET_DEBUG_PRINTF("Send aborted to %s\n", str); }
int SocketLayer::RecvFrom( const SOCKET s, RakPeer *rakPeer, int *errorCode, RakNetSmartPtr<RakNetSocket> rakNetSocket, unsigned short remotePortRakNetWasStartedOn_PS3 ) { int len=0; #if (defined(_XBOX) || defined(_X360)) && defined(RAKNET_USE_VDP) char dataAndVoice[ MAXIMUM_MTU_SIZE*2 ]; char *data=&dataAndVoice[sizeof(unsigned short)]; // 2 bytes in #else char data[ MAXIMUM_MTU_SIZE ]; #endif if (slo) { SystemAddress sender; len = slo->RakNetRecvFrom(s,rakPeer,data,&sender,true); if (len>0) { ProcessNetworkPacket( sender, data, len, rakPeer, rakNetSocket, RakNet::GetTimeUS() ); return 1; } } if ( s == (SOCKET) -1 ) { *errorCode = -1; return -1; } #if defined (_WIN32) || !defined(MSG_DONTWAIT) const int flag=0; #else const int flag=MSG_DONTWAIT; #endif sockaddr_in sa; socklen_t len2; unsigned short portnum=0; if (remotePortRakNetWasStartedOn_PS3!=0) { #if defined(_PS3) || defined(__PS3__) || defined(SN_TARGET_PS3) #endif } else { len2 = sizeof( sa ); sa.sin_family = AF_INET; sa.sin_port=0; #if (defined(_XBOX) || defined(_X360)) && defined(RAKNET_USE_VDP) /* DWORD zero=0; WSABUF wsaBuf; DWORD lenDword=0; wsaBuf.buf=dataAndVoice; wsaBuf.len=sizeof(dataAndVoice); int result = WSARecvFrom( s, &wsaBuf, 1, &lenDword, &zero, ( sockaddr* ) & sa, ( socklen_t* ) & len2, 0,0 ); len=lenDword; */ len = recvfrom( s, dataAndVoice, sizeof(dataAndVoice), flag, ( sockaddr* ) & sa, ( socklen_t* ) & len2 ); if (len>2) { // Skip first two bytes len-=2; } #else len = recvfrom( s, data, MAXIMUM_MTU_SIZE, flag, ( sockaddr* ) & sa, ( socklen_t* ) & len2 ); #endif portnum = ntohs( sa.sin_port ); } if ( len == 0 ) { #ifdef _DEBUG RAKNET_DEBUG_PRINTF( "Error: recvfrom returned 0 on a connectionless blocking call\non port %i. This is a bug with Zone Alarm. Please turn off Zone Alarm.\n", portnum ); RakAssert( 0 ); #endif // 4/13/09 Changed from returning -1 to 0, to prevent attackers from sending 0 byte messages to shutdown the server *errorCode = 0; return 0; } if ( len > 0 ) { ProcessNetworkPacket( SystemAddress(sa.sin_addr.s_addr, portnum), data, len, rakPeer, rakNetSocket, RakNet::GetTimeUS() ); return 1; } else { *errorCode = 0; #if defined(_WIN32) && defined(_DEBUG) DWORD dwIOError = WSAGetLastError(); if ( dwIOError == WSAEWOULDBLOCK ) { return SOCKET_ERROR; } if ( dwIOError == WSAECONNRESET ) { #if defined(_DEBUG) // RAKNET_DEBUG_PRINTF( "A previous send operation resulted in an ICMP Port Unreachable message.\n" ); #endif unsigned short portnum=0; ProcessPortUnreachable(sa.sin_addr.s_addr, portnum, rakPeer); // *errorCode = dwIOError; return -1; } else { #if defined(_DEBUG) && !defined(_XBOX) && !defined(X360) if ( dwIOError != WSAEINTR && dwIOError != WSAETIMEDOUT) { LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "recvfrom failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); } #endif } #endif } return 0; // no data }
PluginReceiveResult Router::OnReceive(Packet *packet) { if (packet->data[0]==ID_ROUTE_AND_MULTICAST || (packet->length>5 && packet->data[0]==ID_TIMESTAMP && packet->data[5]==ID_ROUTE_AND_MULTICAST)) { #ifdef _DO_PRINTF RAKNET_DEBUG_PRINTF("%i got routed message from %i\n", peer->GetExternalID(packet->systemAddress).port, packet->systemAddress.port); #endif RakNetTime timestamp; PacketPriority priority; PacketReliability reliability; unsigned char orderingChannel; SystemAddress originalSender; RakNet::BitStream out; BitSize_t outStartingOffset; unsigned int payloadBitLength; unsigned payloadWriteByteOffset; RakNet::BitStream incomingBitstream(packet->data, packet->length, false); incomingBitstream.IgnoreBits(8); if (packet->data[0]==ID_TIMESTAMP) { incomingBitstream.Read(timestamp); out.Write((MessageID)ID_TIMESTAMP); out.Write(timestamp); incomingBitstream.IgnoreBits(8); } // Read the send parameters unsigned char c; incomingBitstream.ReadCompressed(c); priority=(PacketPriority)c; incomingBitstream.ReadCompressed(c); reliability=(PacketReliability)c; incomingBitstream.ReadCompressed(orderingChannel); incomingBitstream.Read(payloadBitLength); out.Write((MessageID)ID_ROUTE_AND_MULTICAST); out.WriteCompressed((unsigned char)priority); out.WriteCompressed((unsigned char)reliability); out.WriteCompressed((unsigned char)orderingChannel); out.Write(payloadBitLength); out.AlignWriteToByteBoundary(); incomingBitstream.AlignReadToByteBoundary(); payloadWriteByteOffset=(unsigned int) BITS_TO_BYTES(out.GetWriteOffset()); out.Write(&incomingBitstream, payloadBitLength); // This write also does a read on incomingBitStream if (restrictByType) { RakNet::BitStream t(out.GetData()+payloadWriteByteOffset, sizeof(unsigned char), false); MessageID messageID; t.Read(messageID); if (allowedTypes.HasData(messageID)==false) return RR_STOP_PROCESSING_AND_DEALLOCATE; // Don't route restricted types } incomingBitstream.Read(originalSender); out.Write(originalSender); outStartingOffset=out.GetWriteOffset(); // Deserialize the root bool hasData=false; SystemAddress recipient; unsigned short numberOfChildren; incomingBitstream.Read(hasData); incomingBitstream.Read(recipient); // This should be our own address if (incomingBitstream.ReadCompressed(numberOfChildren)==false) { #ifdef _DEBUG RakAssert(0); #endif return RR_STOP_PROCESSING_AND_DEALLOCATE; } unsigned childIndex; bool childHasData=false; SystemAddress childRecipient; unsigned short childNumberOfChildren; SystemAddress immediateRecipient; immediateRecipient=UNASSIGNED_SYSTEM_ADDRESS; int pendingNodeCount=0; for (childIndex=0; childIndex < numberOfChildren; childIndex++) { while (pendingNodeCount!=-1) { // Copy out the serialized subtree for this child incomingBitstream.Read(childHasData); incomingBitstream.Read(childRecipient); if (!incomingBitstream.ReadCompressed(childNumberOfChildren)) return RR_STOP_PROCESSING_AND_DEALLOCATE; if (immediateRecipient==UNASSIGNED_SYSTEM_ADDRESS) { immediateRecipient=childRecipient; } pendingNodeCount+=childNumberOfChildren-1; out.Write(childHasData); out.Write(childRecipient); out.WriteCompressed(childNumberOfChildren); } #ifdef _DO_PRINTF RAKNET_DEBUG_PRINTF("%i routing to %i\n", peer->GetExternalID(packet->systemAddress).port, immediateRecipient.port); #endif // Send what we got so far SendUnified(&out, priority, reliability, orderingChannel, immediateRecipient, false); // Restart writing the per recipient data out.SetWriteOffset(outStartingOffset); // Reread the top level node immediateRecipient=UNASSIGNED_SYSTEM_ADDRESS; pendingNodeCount=0; } // Write the user payload to the packet struct if this is a destination and change the sender and return true if (hasData) { #ifdef _DO_PRINTF RAKNET_DEBUG_PRINTF("%i returning payload to user\n", peer->GetExternalID(packet->systemAddress).port); #endif if (packet->data[0]==ID_TIMESTAMP ) { memcpy( packet->data + sizeof(RakNetTime)+sizeof(unsigned char), out.GetData()+payloadWriteByteOffset, BITS_TO_BYTES(payloadBitLength) ); packet->bitSize=BYTES_TO_BITS(sizeof(RakNetTime)+sizeof(unsigned char))+payloadBitLength; } else { memcpy( packet->data, out.GetData()+payloadWriteByteOffset, BITS_TO_BYTES(payloadBitLength) ); packet->bitSize=payloadBitLength; } packet->length=(unsigned int) BITS_TO_BYTES(packet->bitSize); packet->systemAddress.systemIndex=(SystemIndex)-1; packet->systemAddress=originalSender; return RR_CONTINUE_PROCESSING; } // Absorb return RR_STOP_PROCESSING_AND_DEALLOCATE; } return RR_CONTINUE_PROCESSING; }
void SocketLayer::GetMyIP( char ipList[ MAXIMUM_NUMBER_OF_INTERNAL_IDS ][ 16 ], unsigned int binaryAddresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] ) { #if !defined(_PS3) && !defined(__PS3__) && !defined(SN_TARGET_PS3) char ac[ 80 ]; if ( gethostname( ac, sizeof( ac ) ) == -1 ) { #if defined(_WIN32) && !defined(_XBOX) && !defined(X360) && defined(_DEBUG) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "gethostname failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif return ; } struct hostent *phe = gethostbyname( ac ); if ( phe == 0 ) { #if defined(_WIN32) && !defined(_XBOX) && !defined(X360) && defined(_DEBUG) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "gethostbyname failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif return ; } struct in_addr addr[ MAXIMUM_NUMBER_OF_INTERNAL_IDS ]; int idx; for ( idx = 0; idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; ++idx ) { if (phe->h_addr_list[ idx ] == 0) break; memcpy( &addr[idx], phe->h_addr_list[ idx ], sizeof( struct in_addr ) ); //cout << "Address " << i << ": " << inet_ntoa(addr) << endl; #if defined(_WIN32) binaryAddresses[idx]=addr[idx].S_un.S_addr; #else binaryAddresses[idx]=addr[idx].s_addr; #endif strcpy( ipList[ idx ], inet_ntoa( addr[idx] ) ); } for ( ; idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; ++idx ) { ipList[idx][0]=0; } #else union CellNetCtlInfo info; int errCode; if((errCode=cellNetCtlGetInfo(CELL_NET_CTL_INFO_IP_ADDRESS, &info)) >= 0){ memcpy(ipList[0], info.ip_address, sizeof(info.ip_address)); ipList[1][0]=0; } return; #endif }
int SocketLayer::SendTo( SOCKET s, const char *data, int length, unsigned int binaryAddress, unsigned short port, unsigned short remotePortRakNetWasStartedOn_PS3 ) { RakAssert(length<=MAXIMUM_MTU_SIZE-UDP_HEADER_SIZE); if (slo) { SystemAddress sa(binaryAddress,port); return slo->RakNetSendTo(s,data,length,sa); } if ( s == (SOCKET) -1 ) { return -1; } int len=0; if (remotePortRakNetWasStartedOn_PS3!=0) { len = SendTo_PS3Lobby(s,data,length,binaryAddress,port, remotePortRakNetWasStartedOn_PS3); } else { #if (defined(_XBOX) || defined(_X360)) && defined(RAKNET_USE_VDP) len = SendTo_360(s,data,length,0,0,binaryAddress,port); #else len = SendTo_PC(s,data,length,binaryAddress,port); #endif } if ( len != -1 ) return 0; #if defined(_WIN32) && !defined(_WIN32_WCE) DWORD dwIOError = WSAGetLastError(); if ( dwIOError == WSAECONNRESET ) { #if defined(_DEBUG) RAKNET_DEBUG_PRINTF( "A previous send operation resulted in an ICMP Port Unreachable message.\n" ); #endif } else if ( dwIOError != WSAEWOULDBLOCK ) { #if defined(_WIN32) && !defined(_XBOX) && !defined(X360) && defined(_DEBUG) LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "sendto failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif } return dwIOError; #endif return 1; // error }
void PacketLogger::WriteLog(const char *str) { RAKNET_DEBUG_PRINTF("%s\n", str); }
virtual void OnFilePushesComplete( RakNet::SystemAddress systemAddress, unsigned short setID ) { char str[32]; systemAddress.ToString(true, (char*) str); RAKNET_DEBUG_PRINTF("File pushes complete to %s\n", str); }
SOCKET SocketLayer::CreateBoundSocket( unsigned short port, bool blockingSocket, const char *forceHostAddress, unsigned int sleepOn10048 ) { (void) blockingSocket; int ret; SOCKET listenSocket; sockaddr_in listenerSocketAddress; // Listen on our designated Port# listenerSocketAddress.sin_port = htons( port ); #if (defined(_XBOX) || defined(_X360)) && defined(RAKNET_USE_VDP) listenSocket = socket( AF_INET, SOCK_DGRAM, IPPROTO_VDP ); #else listenSocket = socket( AF_INET, SOCK_DGRAM, 0 ); #endif if ( listenSocket == (SOCKET) -1 ) { #if defined(_WIN32) && !defined(_XBOX) && defined(_DEBUG) DWORD dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "socket(...) failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif return (SOCKET) -1; } SetSocketOptions(listenSocket); // Fill in the rest of the address structure listenerSocketAddress.sin_family = AF_INET; if (forceHostAddress && forceHostAddress[0]) { // printf("Force binding %s:%i\n", forceHostAddress, port); listenerSocketAddress.sin_addr.s_addr = inet_addr( forceHostAddress ); } else { // printf("Binding any on port %i\n", port); listenerSocketAddress.sin_addr.s_addr = INADDR_ANY; } // bind our name to the socket ret = bind( listenSocket, ( struct sockaddr * ) & listenerSocketAddress, sizeof( listenerSocketAddress ) ); if ( ret <= -1 ) { #if defined(_WIN32) && !defined(_XBOX) && !defined(X360) DWORD dwIOError = GetLastError(); if (dwIOError==10048) { if (sleepOn10048==0) return (SOCKET) -1; // Vista has a bug where it returns WSAEADDRINUSE (10048) if you create, shutdown, then rebind the socket port unless you wait a while first. // Wait, then rebind RakSleep(100); closesocket(listenSocket); listenerSocketAddress.sin_port = htons( port ); listenSocket = socket( AF_INET, SOCK_DGRAM, 0 ); if ( listenSocket == (SOCKET) -1 ) return false; SetSocketOptions(listenSocket); // Fill in the rest of the address structure listenerSocketAddress.sin_family = AF_INET; if (forceHostAddress && forceHostAddress[0]) listenerSocketAddress.sin_addr.s_addr = inet_addr( forceHostAddress ); else listenerSocketAddress.sin_addr.s_addr = INADDR_ANY; // bind our name to the socket ret = bind( listenSocket, ( struct sockaddr * ) & listenerSocketAddress, sizeof( listenerSocketAddress ) ); if ( ret >= 0 ) return listenSocket; } dwIOError = GetLastError(); LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "bind(...) failed:Error code - %d\n%s", (unsigned int) dwIOError, (char*) messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #elif (defined(__GNUC__) || defined(__GCCXML__) || defined(_PS3) || defined(__PS3__) || defined(SN_TARGET_PS3)) && !defined(__WIN32) #endif return (SOCKET) -1; } return listenSocket; }