digitalmars.D.learn - strange problem with socket.accept()
- Charma (25/25) May 30 2007 hello,
- Daniel Giddings (3/32) May 30 2007 Perhaps the output is not being flushed before the socket blocks your
- Daniel Giddings (8/41) May 30 2007 I don't see a flush command in std.stdio but it mentions it extends off
- Charma (4/49) May 30 2007 thanks!
- Daniel Giddings (6/10) May 30 2007 No probs, in most languages the output is buffered by default as it is
- BCS (2/6) May 30 2007 another way to get writef to flush is send a '\n'.
hello, I have a very strange problem with the accept function of TpcSocket. I programmed a mini-server who is waiting for a user and does something as soon a user has connected(this has no concern) anyway, i got this part of code: ... scope TcpSocket server = new TcpSocket( ); Socket user; server.blocking(true); server.bind( addr ); server.listen( 10 ); ... 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? thanks
May 30 2007
Perhaps the output is not being flushed before the socket blocks your thread waiting for a user? Charma wrote:hello, I have a very strange problem with the accept function of TpcSocket. I programmed a mini-server who is waiting for a user and does something as soon a user has connected(this has no concern) anyway, i got this part of code: ... scope TcpSocket server = new TcpSocket( ); Socket user; server.blocking(true); server.bind( addr ); server.listen( 10 ); ... 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? thanks
May 30 2007
I don't see a flush command in std.stdio but it mentions it extends off of std.c.stdio so perhaps try adding: import std.c.stdio; ... writef( "Waiting for user..." ); // ** fflush(stdout); user = server.accept( ); Daniel Giddings wrote:Perhaps the output is not being flushed before the socket blocks your thread waiting for a user? Charma wrote:hello, I have a very strange problem with the accept function of TpcSocket. I programmed a mini-server who is waiting for a user and does something as soon a user has connected(this has no concern) anyway, i got this part of code: ... scope TcpSocket server = new TcpSocket( ); Socket user; server.blocking(true); server.bind( addr ); server.listen( 10 ); ... 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? thanks
May 30 2007
thanks! this did fix the problem... I didn't know that writef is writing to buffer only... Daniel Giddings wrote:I don't see a flush command in std.stdio but it mentions it extends off of std.c.stdio so perhaps try adding: import std.c.stdio; ... writef( "Waiting for user..." ); // ** fflush(stdout); user = server.accept( ); Daniel Giddings wrote:Perhaps the output is not being flushed before the socket blocks your thread waiting for a user? Charma wrote:hello, I have a very strange problem with the accept function of TpcSocket. I programmed a mini-server who is waiting for a user and does something as soon a user has connected(this has no concern) anyway, i got this part of code: ... scope TcpSocket server = new TcpSocket( ); Socket user; server.blocking(true); server.bind( addr ); server.listen( 10 ); ... 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? thanks
May 30 2007
Charma wrote:thanks! this did fix the problem... I didn't know that writef is writing to buffer only...No probs, in most languages the output is buffered by default as it is very inefficient to write to the console (or file) with every write call. So it will decide to flush the buffer periodically, but that would only happen when you call an ouput function. :-) Dan
May 30 2007
Reply to Charma,writef( "Waiting for user..." ); // ** ... 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 theanother way to get writef to flush is send a '\n'.
May 30 2007