Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Socketin kanssa hätä

AdeRide [13.04.2005 20:13:30]

#

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++;
}

sqwiik [13.04.2005 20:24:20]

#

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.

AdeRide [13.04.2005 20:27:46]

#

Joo sen on tarkoitus luoda aina uus.

Muuten meni kyllä vähän ohi.

Voisitko esittää jotain korjaus vaihtoehtoa? Ihan niinkuin koodina...

sqwiik [13.04.2005 20:37:06]

#

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 ++;
}

AdeRide [13.04.2005 21:20:25]

#

Joo, eipä toiminu kiskas yhdeksän erroria, mutta muutaman varmaan saa pois parilla säädöllä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta