On 19 Sep 2005, at 14:01, Andreas Höschler wrote:
Hi all,
I am opening a socket on one machine and do
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(connectionAccepted:)
name:FBConnectionAcceptedNotification object: nil];
[self acceptConnectionInBackgroundAndNotify];
I connect to this socket from another machine. This fires the
following method:
- (void)connectionAccepted:(NSNotification *)notification
{
NSFileHandle *clientHandle = [[notification userInfo]
objectForKey:NSFileHandleNotificationFileHandleItem];
[clientHandle readInBackgroundAndNotify];
}
On the remote machine I send stuff using
- [NSFileHandle writeData:]
and wait for
- (void)readCompleted:(NSNotification *)notification
being called on the server end. This basically works. However,
sometimes it takes 5 or more minutes before the data is received by
the server. I assume that since I only sent a few bytes only and
the data is kept until either more data is queued for transmission
or a timeout occurs before the data is actually sent over the line.
Can anybody confirm this assumption? What can i do about it? What I
am looking for is some kind of flush mechanism (in NSFileHandle or
directly on the socket) that sends out the data immediately
regardless of how small the package is.
The assumption is (at least as far as the base library is concerned)
wrong ... -writeData: sends the data immediately, no matter how small
the amount.
That being said, it's possible that your underlying network stack is
not sending the data. Seems unlikely though.
Perhaps you aren't running the runloop? The runloop does neeed to be
run in order to receive data asynchronously.
_______________________________________________
Discuss-gnustep mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnustep