strange problem with socket.accept()
Charma
Motoko_Kusanagi at web.de
Wed May 30 06:38:18 PDT 2007
Regan Heath Wrote:
> Charma Wrote:
> > Paul Findlay Wrote:
> >
> > > > while(!killServer)
> > > > {
> > > > writef( "Waiting for user..." ); // **
> > > > user = server.accept( );
> > > > writef("[OK]")
> > > > ...
> > > > }
> > >
> > > > Now my problem is that the line marked with ** is only displayed when a
> > > > user connects... which is very strange... i can't figure out the problem,
> > > > since i tell him to FIRST write that line and THEN wait for a user...
> > > > Any ideas?
> > > Output buffering? Since server.accept() blocks you have to wait for the user
> > > to connect until writef next called, whereupon the buffered output may be
> > > flushed?
> > >
> > > Maybe try something like the following instead
> > >
> > > import std.c.stdio;
> > >
> > > // ...
> > > while(/*...*/)
> > > {
> > > writef( "Waiting for user..." );
> > > fflush(stdout); // or flushall();
> > > // ...
> > > }
> > >
> > > Yes, I am just guessing. Perhaps best to ask in digitalmars.D.learn
> > >
> > > - Paul
> >
> >
> > i do know that accept blocks... but it is called AFTER the writef... so it should black AFTER it... i still don't get it...
>
> I am fairly sure it is output buffering (as Paul suggested). Change writef to writefln (I believe the output code flushes itself when a newline is sent). Failing that manually flushing as Paul mentioned should fix it.
>
> To explain, you call writef, it puts that in the output buffer but does not flush that to the screen. You call accept, this waits for a connection, a connection arrives and (for some reason) the output buffer gets flushed, perhaps because the socket code flushes all handles at some stage?
>
> Regan
ok, i got it now!
fflush fixed it, thanks a lot!
More information about the Digitalmars-d
mailing list