c ++ - send (), returnerer Winsock Error 10038

Indlæg af Hanne Mølgaard Plasc

Problem



Problem:



  • Ring til send () , returnerer Winsock Error 10038 mod sockethåndtag



Illustration:


acceptedSocket = accept (server, (sockaddr *)&sin, &len);



  • acceptere () , returnerer 0


    • En ny tråd , er oprettet for hver forbindelse

    • send () , (i trådfunktion) returnerer 10038




Illustration: - i trådfunktion


//omitted
SOCKET RemoteSocket = (SOCKET) client;
//omitted
send (RemoteSocket, stringToSpend, strlen(stringToSpend), 0)


Forslag:



  • Mulig løbevilkår?

  • Kunne bruge I/O-gennemførelsesporte, men ikke på dette tidspunkt


Bedste reference


Er ikke problemet i linjen


acceptedSocket = accept (server, (sockaddr *)&sin, &len) == INVALID\_SOCKET)


Du laver acceptedSocket resultatet af sammenligningen, men du skal gemme den faktiske stikkontakt, der returneres fra accept på en eller anden måde:


acceptedSocket = accept (server, (sockaddr *)&sin, &len);
isOK= acceptedSocket!=INVALID\_SOCKET;


Selvom jeg er lidt forvirret af de ubalancerede parenteser i dit indlæg, så kan jeg være forkert

Andre referencer 1


accept () giver dig et håndtag til en ny tilslutningsspecifik stikkontakt. for server kode er der 2 + sockets involveret: en er i listen tilstand, du kalder accept () for og anden er en returneret fra accept () - det er en indgående forbindelsesstik. Efter accept () kan der returneres stikkontakt til anden indgående forbindelse mv hvis accept () returnerer 0 er det ikke en indgående forbindelse - det er en fejl.

Andre referencer 2


Hmm, ser ud til at din send udføres for hurtigt, før accept skete. Så stikket, der bruges i send, er ikke gyldigt på det tidspunkt, hvor sendingen udføres. Et af de ubehagelige træk ved multithreadning. Du skal vente på en begivenhed i send tråden og afbrænde en begivenhed, når en accept finder sted