git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@13233 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-Macdonald 2002-03-25 13:11:03 +00:00
parent 60db9f064b
commit b77f096bc5
3 changed files with 44 additions and 109 deletions

View file

@ -6,8 +6,8 @@
* Source/NSException.m: flush stderr ... under windoze stderr is
not automatically flushed!
* Source/GSWindowsFileHandle.m: watch for exceptional conditions
so we can handle socket failures.
* Source/GSTcpPort.mL ditto.
so we can handle socket connection failures in mingw32.
* Source/GSTcpPort.m: ditto.
2002-03-22 Richard Frith-Macdonald <rfm@gnu.org>

View file

@ -1214,10 +1214,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_RDESC
forMode: [modes objectAtIndex: i]
all: YES];
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: [modes objectAtIndex: i]
all: YES];
}
}
else
@ -1226,10 +1222,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_RDESC
forMode: NSDefaultRunLoopMode
all: YES];
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: NSDefaultRunLoopMode
all: YES];
}
}
@ -1263,10 +1255,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_WDESC
forMode: [modes objectAtIndex: i]
all: YES];
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: [modes objectAtIndex: i]
all: YES];
}
}
else
@ -1275,10 +1263,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_WDESC
forMode: NSDefaultRunLoopMode
all: YES];
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: NSDefaultRunLoopMode
all: YES];
}
}
@ -1301,10 +1285,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_RDESC
watcher: self
forMode: [modes objectAtIndex: i]];
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: [modes objectAtIndex: i]];
}
[readInfo setObject: modes forKey: NSFileHandleNotificationMonitorModes];
}
@ -1314,10 +1294,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_RDESC
watcher: self
forMode: NSDefaultRunLoopMode];
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: NSDefaultRunLoopMode];
}
}
@ -1346,10 +1322,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_WDESC
watcher: self
forMode: [modes objectAtIndex: i]];
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: [modes objectAtIndex: i]];
}
}
else
@ -1358,10 +1330,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_WDESC
watcher: self
forMode: NSDefaultRunLoopMode];
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: NSDefaultRunLoopMode];
}
}
}
@ -1378,21 +1346,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
[self setNonBlocking: YES];
}
/*
* An exceptional condition must be treated as a read or write.
*/
if (type == ET_EDESC)
{
if ([writeInfo count] > 0)
{
type = ET_WDESC;
}
else
{
type = ET_RDESC;
}
}
if (type == ET_RDESC)
{
operation = [readInfo objectForKey: NotificationKey];
@ -1476,7 +1429,7 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
}
}
}
else if (type == ET_WDESC)
else
{
NSMutableDictionary *info;

View file

@ -303,7 +303,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
service: (NSString*)s
protocol: (NSString*)p
{
int status = 1;
int net;
struct sockaddr_in sin;
int size = sizeof(sin);
@ -1049,8 +1048,11 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
l = [NSRunLoop currentRunLoop];
modes = nil;
if (readInfo)
modes = (NSArray*)[readInfo objectForKey: NSFileHandleNotificationMonitorModes];
if (readInfo != nil)
{
modes = (NSArray*)[readInfo objectForKey:
NSFileHandleNotificationMonitorModes];
}
if (modes && [modes count])
{
@ -1062,10 +1064,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_RDESC
forMode: [modes objectAtIndex: i]
all: YES];
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: [modes objectAtIndex: i]
all: YES];
}
}
else
@ -1074,17 +1072,14 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_RDESC
forMode: NSDefaultRunLoopMode
all: YES];
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: NSDefaultRunLoopMode
all: YES];
}
}
- (void) ignoreWriteDescriptor
{
NSRunLoop *l;
NSArray *modes;
NSRunLoop *l;
NSArray *modes;
NSMutableDictionary *info;
if (descriptor < 0)
{
@ -1092,18 +1087,25 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
}
l = [NSRunLoop currentRunLoop];
info = nil;
modes = nil;
if ([writeInfo count] > 0)
{
NSMutableDictionary* info = [writeInfo objectAtIndex: 0];
info = [writeInfo objectAtIndex: 0];
modes=(NSArray*)[info objectForKey: NSFileHandleNotificationMonitorModes];
}
if (modes && [modes count])
{
int i;
BOOL connecting = NO;
if ([[info objectForKey: NotificationKey] isEqualToString:
GSFileHandleConnectCompletionNotification] == YES)
{
connecting = YES;
}
for (i = 0; i < [modes count]; i++)
{
@ -1111,10 +1113,13 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_WDESC
forMode: [modes objectAtIndex: i]
all: YES];
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: [modes objectAtIndex: i]
all: YES];
if (connecting == YES)
{
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: [modes objectAtIndex: i]
all: YES];
}
}
}
else
@ -1123,10 +1128,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_WDESC
forMode: NSDefaultRunLoopMode
all: YES];
[l removeEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
forMode: NSDefaultRunLoopMode
all: YES];
}
}
@ -1149,10 +1150,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_RDESC
watcher: self
forMode: [modes objectAtIndex: i]];
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: [modes objectAtIndex: i]];
}
[readInfo setObject: modes forKey: NSFileHandleNotificationMonitorModes];
}
@ -1162,10 +1159,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_RDESC
watcher: self
forMode: NSDefaultRunLoopMode];
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: NSDefaultRunLoopMode];
}
}
@ -1177,10 +1170,9 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
}
if ([writeInfo count] > 0)
{
NSMutableDictionary* info = [writeInfo objectAtIndex: 0];
NSRunLoop* l = [NSRunLoop currentRunLoop];
NSArray* modes = nil;
NSMutableDictionary *info = [writeInfo objectAtIndex: 0];
NSRunLoop *l = [NSRunLoop currentRunLoop];
NSArray *modes;
modes = [info objectForKey: NSFileHandleNotificationMonitorModes];
@ -1188,17 +1180,26 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
if (modes && [modes count])
{
int i;
BOOL connecting = NO;
if ([[info objectForKey: NotificationKey] isEqualToString:
GSFileHandleConnectCompletionNotification] == YES)
{
connecting = YES;
}
for (i = 0; i < [modes count]; i++)
{
[l addEvent: (void*)(gsaddr)descriptor
type: ET_WDESC
watcher: self
forMode: [modes objectAtIndex: i]];
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: [modes objectAtIndex: i]];
if (connecting == YES)
{
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: [modes objectAtIndex: i]];
}
}
}
else
@ -1207,10 +1208,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
type: ET_WDESC
watcher: self
forMode: NSDefaultRunLoopMode];
[l addEvent: (void*)(gsaddr)descriptor
type: ET_EDESC
watcher: self
forMode: NSDefaultRunLoopMode];
}
}
}
@ -1226,21 +1223,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
{
[self setNonBlocking: YES];
}
/*
* If we have an exceptional condition ... treat as a read or write as
* appropriate.
*/
if (type == ET_EDESC)
{
if ([writeInfo count] > 0)
{
type = ET_WDESC;
}
else
{
type = ET_RDESC;
}
}
if (type == ET_RDESC)
{
@ -1318,7 +1300,7 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
}
}
}
else if (type == ET_WDESC)
else
{
NSMutableDictionary *info;