diff --git a/ChangeLog b/ChangeLog index 94a91d7ab..12425c895 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 diff --git a/Source/UnixFileHandle.m b/Source/UnixFileHandle.m index f5eba3e7b..fccf1cc83 100644 --- a/Source/UnixFileHandle.m +++ b/Source/UnixFileHandle.m @@ -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; diff --git a/Source/WindowsFileHandle.m b/Source/WindowsFileHandle.m index 39708d3c8..b753a6281 100644 --- a/Source/WindowsFileHandle.m +++ b/Source/WindowsFileHandle.m @@ -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;