http://www.gametutorials.com/tutorials/
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ää :(
Pistä koodinpätkää ohjelmastasi jos sulla ei nyt oo ihan yksi-yhteen kopio tosta gametutorials-koodista.
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.
Virheilmoituksen mukaan sukkasi on hukassa eli sukka ei ole socketti - missä määrittelet sukka-socketin ja luot yhteyden?
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.
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ä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.