Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
May 30, 2007 strange problem with socket.accept() | ||||
---|---|---|---|---|
| ||||
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 Re: strange problem with socket.accept() | ||||
---|---|---|---|---|
| ||||
Posted in reply to Charma | 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 Re: strange problem with socket.accept() | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Giddings | 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 Re: strange problem with socket.accept() | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Giddings | 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 Re: strange problem with socket.accept() | ||||
---|---|---|---|---|
| ||||
Posted in reply to Charma | 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 the
another way to get writef to flush is send a '\n'.
|
May 31, 2007 Re: strange problem with socket.accept() | ||||
---|---|---|---|---|
| ||||
Posted in reply to Charma | 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
|
Copyright © 1999-2021 by the D Language Foundation