Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: select ongelma winsockilla

sooda [05.03.2004 17:15:18]

#

http://www.gametutorials.com/tutorials/networking/networking_Pg1.htm mestoilta multiple hosts kohdasta matkin sitä selectin käyttöä, teen fd_setin ja kopsin siihen valmiin soketin ja selecti sen kun pukkaa virheitä: serveri sanoo(msdn:stä):
WSAEINVAL
10022

Invalid argument.

Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.

clientti sanoo:
WSAENOTSOCK
10038

Socket operation on nonsocket.

An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

kysykää mitä pitää selittää vielä jos jäi epäselväksi. prkl kun olen tapellut tän kanssa jo pari päivää :(

Dual [05.03.2004 21:57:21]

#

Pistä koodinpätkää ohjelmastasi jos sulla ei nyt oo ihan yksi-yhteen kopio tosta gametutorials-koodista.

sooda [10.03.2004 17:28:29]

#

se on suunillee yksi yhteen... tossa jotain:

timeval waitTime;
waitTime.tv_sec = 0;
waitTime.tv_usec = 0;
FD_SET Setti;
FD_ZERO(&Setti);
FD_SET(sukka, &Setti);
cout << "What do?\n\n1. Send text message\n2. Send file\n3. Quit\n";
while(k != '3') {
    waitTime.tv_sec = 0;
    waitTime.tv_usec = 0;
    result = select(1, &Setti, NULL, NULL, &waitTime);
    if (result == 0) {
        // ei dataa tullut
    } else if (result == SOCKET_ERROR) {
        cout << "Socket error " << WSAGetLastError() << " with select()\n";
    } else {

tuskin muuta hirveesti tarvii koska heti tossa sitte selecti pukkaa virhettä. sukka on socketti joka o yhdistetty.

Antti [11.03.2004 13:18:27]

#

Virheilmoituksen mukaan sukkasi on hukassa eli sukka ei ole socketti - missä määrittelet sukka-socketin ja luot yhteyden?

thefox [11.03.2004 13:27:35]

#

Oletko aivan varma että socketti on validi? Jos kehtaat niin pistä vaikka koko projekti pakettiin ja vaikkapa sähköpostiin (ks. profiili) niin katselen mikä siinä on vikana. Näin suoralta kädeltä en osaa mitään sanoa.

sooda [11.03.2004 18:06:30]

#

höm, nyt sain apua muualta ja nyt toimii serverillä kun muutin sorsaa tällaiseksi:

timeval waitTime;
  waitTime.tv_sec = 0;
  waitTime.tv_usec = 0;
  FD_SET Setti;
  cout << "What do?\n\n1. Send text message\n2. Send file\n3. Quit\n";
  while(k != '3') {
      FD_ZERO(&Setti);
      FD_SET(sukka, &Setti);
      waitTime.tv_sec = 0;
      waitTime.tv_usec = 0;
      result = select(1, &Setti, NULL, NULL, &waitTime);
      if (result == 0) {
          // ei dataa tullut
      } else if (result == SOCKET_ERROR) {
          cout << "Socket error " << WSAGetLastError() << " with select()\n";

select kuulemma rikkoo fd_setin eli se pitää tehdä uusiksi joka kerta ennen kutsua. nyt siis servulla toimii mutta clientillä ei, eikö clienttisukka ole valid selectin näkökulmasta vai eikö clientsukalla voi käyttää selectiä?

Vastaus

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

Tietoa sivustosta