Eli mikä vika tässä funktiossa on, kun se antaa virheilmoituksia kolme käännettäessä.
void CreateNewSocket(int i) { SOCKET socket_[i]; socket_[i] = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(socket_[i] == INVALID_SOCKET) { printf("Error at Socket(): %ld\n", WSAGetLastError()); WSACleanup(); return; } sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr("123.123.123.123"); service.sin_port = htons( 22 ); if(bind(socket_[i], (SOCKADDR*) &service, sizeof(service)) == SOCKET_ERROR) { printf("Error at Bind(): %ld\n", WSAGetLastError()); closesocket(socket_[i]); return; } i++; }
Ensiäänkin, et voi alustaa taulukkoa tuolla tavalla suoraan muuttujalla, vaan joudut varamaan sen joko new:llä tai malloc:lla. Tuo nähtävästi loisi aina uuden, joten laita taulukon määrittely muualle koodiin, niin saattaa toimia paremmin.
Joo sen on tarkoitus luoda aina uus.
Muuten meni kyllä vähän ohi.
Voisitko esittää jotain korjaus vaihtoehtoa? Ihan niinkuin koodina...
Tämä on hattukoodia, joten ei välttämättä toimi.
/* Jossain muualla nämä */ #define MaxSocket 128 // Max. yhteyksien määrä SOCKET socket_[MaxSocket] = {NULL}; //Alustus signed long int used_sockets = 0; void CreateNewSocket() { if(used_sockets < 0 || used_sockets >= MaxSocket)return; socket_[used_sockets] = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(socket_[used_sockets] == INVALID_SOCKET) { printf("Error at Socket(): %ld\n", WSAGetLastError()); WSACleanup(); return; } sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr("123.123.123.123"); service.sin_port = htons( 22 ); if(bind(socket_[used_sockets], (SOCKADDR*) &service, sizeof(service)) == SOCKET_ERROR) { printf("Error at Bind(): %ld\n", WSAGetLastError()); closesocket(socket_[used_sockets]); return; } used_sockets ++; }
Joo, eipä toiminu kiskas yhdeksän erroria, mutta muutaman varmaan saa pois parilla säädöllä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.