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