Hallo,
Ik zou aanvankelijk bezig met iets voor MSN Messenger. Maar ben toch maar bezig gegaan met het maken van een IRC-like chatservertje (en client).
Ik gebruik daarvoor een TServerSocket met non-blocking thread gebaseerde sockets. In ClientExecute gebruik ik dan voor het binnenhalen van data dus TWinSocketStream.Read.
Ik had eerst zoiets als dit (alleen relevante delen laat ik zien):
Citaat:
procedure TCSThread.ClientExecute;
var
Buf: array[0..MAXLINECHARS - 1] of Char;
begin
// ...
BytesRead := Stream.Read(Buf, 512);
// ...
end;
|
Stream is van het type TWinSocketStream en MAXLINECHARS = 1024. Het zou dus nooit moeten kunnen dat er teveel bytes naar Buf worden geschreven, niet door Read in ieder geval, want die mag maximaal 512 bytes naar Buf schrijven.
Dit gebeurde echter wel... Als ik met de client een berichtje groter dan 512 bytes verzond naar de server dan gaf ie een Access violation at ... : write error at .... Er werd dus blijkbaar getracht meer dan 512 bytes naar Buf te schrijven...
Later veranderde ik dit maar eens in 1024 (de precieze grootte van Buf dus), en toen deed ie het wel...
Weet iemand misschien hoe dit zit?? Komt het door een fout in mijn besturingssysteem, of is het meer een fout van de Read functie? Ik heb Windows 2000, en heb recentelijk alle essentiële updates geïnstalleerd! (Misschien dat het daaraan ligt...?)