Tcp Socket Problem
-
Hi Leute,
Bin schon wieder mal am Debuggen bzw. Portieren von Linux nach Windows.
Wie gehabt unter Linux läufts unter Windows net, aber diesmal hab ich ein Problem mitn TcpSocket:
Hab ein Sprachübertragungsprogramm geschrieben, welches RTP und RTCP benutzt.
RTP-Seite funtzt eh. RTCP mäßig hab ich unter Windows Probleme.
Allerdings auf der TCP-Handshake Ebene.Ich bau mit connect eine Verbindung zu meinem Peer auf der mit accept auf einen Anruf wartet.
Zwischen Linux + Linux funtzt. Von Linux nach Windows funtzt. Von Windows nach Linux funktionierts nur einmal und dann bringt mir connect einen Fehler als return Wert.Die WSAGetLastError() berichtet mir "Error 10057" was so viel heißt wie WSAENOTCONN was soviel heißt wie
"A request to send or receive data was disallowed because the socket is not connected"
was in diesem Fall wiederum gar nix heißt.S... Fehlermeldung, ich weiß selber, dass ich nicht connected bin, da ja ein connect gerade fehlgeschlagen ist.
Übergeben werden allerdings die richtigen Parameter, dh IP Port usw. (ansonsten würds ja beim ersten mal auch nicht funktionier)
Sprich irgendwie geb ich Resourcen nicht mehr frei.
Allerdings mach ich nach jeder Verbindung einen read write shutdown auf meinen Socket und er sollte somit wieder zur Verfügung stehen.
Meine Socket Option hab ich auch auf reuseable gesetzt.
char yes = 1; setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(char))Interessanter Weise hilfts auch nicht, wenn ich dass Programm beende und erneut starte. Weiterhin schlägt connect zu einem peer der mit accept wartet fehl.
Was allerdings hilft:
- Schließen und Neustart der Console.
- A Zeitchen warten und erneut probierenDa scheints irgendwie mit der Socketoption reusable nicht zu klappen, allerdings bringt mir das setzen der Gleichen keine Fehlermeldung ein.
Is vielleicht der optlen Parameter sizeof(char) diesbezüglich falsch?
optlen: [in] Size, in bytes, of the optval buffer.Unter Linux übergebe ich einen int Pointer als yes und nehm dann sizeof(int).
Das hab ich allerdings unter Windows auch schon probiert.Hat jmd. eine Idee??
mfg zoni
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo,
Du erstellst aber schon einen neuen Socket vor jedem connect oder ?
MfG
RB
-
Klar mach ich das.
Allerdings mach ich immer ein bind aufs selbe Port vorm connect.
Sozusagen is das Port dann für ne Minute oder so blockiert.mfg zoni