Martin Weissbach Martin Weissbach martin.weissbach@gmx.de:
"Erik Schanze" Schanzi_@gmx.de wrote:
Hallo!
Kennt jemand eine Möglichkeit den Empfangs- und Sendepuffer eines UDP-Sockets zu löschen?
Könntest du etwas Code schicken?
z.B. die Initialisierung der Socket: --------8<------------------------------------------------------- int InitDataConn(char *pDestIP) { struct timeval tv; /* 0.5 MB as socket buffers should be enough */ int sockBufSize = 524288;
if ( lData.inSocket < 0 ) { if ( (lData.inSocket = _CreateInSocket(DATA_PORT)) == FAIL) { TRACE_DEBUG ("Could not create DataInSocket.\n"); return FAIL; }
if( setsockopt(lData.inSocket,SOL_SOCKET,SO_RCVBUF, &sockBufSize ,sizeof(sockBufSize)) == FAIL ) { AddMessage("Could not set recv buffer on DataInSocket.\n"); return FAIL; }
if( setsockopt(lData.inSocket,SOL_SOCKET,SO_SNDBUF, &sockBufSize ,sizeof(sockBufSize)) == FAIL ) { AddMessage("Could not set send buffer on DataInSocket.\n"); return FAIL; } }
if( lData.outSocket < 0 ) { if( (lData.outSocket = _CreateOutSocket(pDestIP, DATA_PORT, TRUE)) == FAIL) { TRACE_DEBUG ("Could not create DataOutSocket.\n"); return FAIL; }
if( setsockopt(lData.outSocket,SOL_SOCKET,SO_RCVBUF, &sockBufSize ,sizeof(sockBufSize)) == FAIL ) { AddMessage("Could not set recv buffer on DataOutSocket.\n"); return FAIL; }
if( setsockopt(lData.outSocket,SOL_SOCKET,SO_SNDBUF, &sockBufSize ,sizeof(sockBufSize)) == FAIL ) { AddMessage("Could not set send buffer on DataOutSocket.\n"); return FAIL; } } return OK; } --------8<------------------------------------------------------------
Dnn werden die Sockets gebunden (bind()) und verbunden (connect()), der Datenaustausch geht mit send() und recv(). Der Code ist nicht weiter spannend. ;-)
Normalerweise muss man bei UDP keine Buffer flushen, wenn du eine zuverlässige Verbindung haben willst, solltest du TCP benutzen.
Mir geht es nicht darum den Puffer zu flushen, d. h. alles zum Empfänger zu schieben, sondern zu verwerfen, entfernen, sauber machen ...
Vielleicht hatte ich meine Frage nicht gut gestellt. Ab einem bestimmten Zeitpunkt werden auf einen Schlag die Pakete, die noch zwischen Sender und Empfänger unterwegs sind und in den Puffern stecken, wertlos und sollten möglichst direkt in den Puffern gelöscht werden, statt sie Paket für Paket am Socket abzuholen.
Freundlich grüßend,
Erik