This is MiscSocket.m in view mode; [Download] [Up]
/* Abstract class to act as a cover for sockets.
*
* Copyright (c) 1996 Aleksey Sudakov <zander@cnext.crec.mipt.ru>.
*
* This software is subject to the terms of the MiscKit license
* agreement. Refer to the license document included with the
* MiscKit distribution for these terms.
*
* Version 1.0 BETA (16 December 1995)
*/
#import "MiscSocket.h"
//#import <misckit/MiscSocket.h>
#import <Foundation/NSCoder.h>
#import <errno.h>
#ifdef WIN32
#import <winsock.h>
#import <io.h>
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
#else
#import <sys/socket.h>
extern int close(int);
extern int dup(int);
#endif WIN32
extern int errno;
@implementation MiscSocket
- init
{
if (0 <= sock && 0 < initCount) {
int old_errno = errno;
close(sock);
errno = old_errno;
}
initCount++;
sock = domain = type = -1;
return self;
}
- initWithCoder:(NSCoder *)coder
{
[coder decodeValuesOfObjCTypes:"iii", &sock, &domain, &type];
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeValuesOfObjCTypes:"iii", &sock, &domain, &type];
}
- initDomain:(int)aDomain type:(int)aType
{
[self init];
switch (aType) {
case MiscSOCK_RAW:
sock = socket(aDomain, SOCK_RAW, 0);
break;
case MiscSOCK_DGRAM:
sock = socket(aDomain, SOCK_DGRAM, 0);
break;
case MiscSOCK_STREAM:
sock = socket(aDomain, SOCK_STREAM, 0);
break;
default :
sock = -1;
errno = ESOCKTNOSUPPORT;
}
if (sock < 0){
[self release];
return nil;
}
domain = aDomain;
type = aType;
return self;
}
- close
{
return [self init];
}
- copy
{
return [self copyWithZone:[self zone]];
}
- copyWithZone:(NSZone *)zone
{
MiscSocket *copy = [[[self class] allocWithZone:zone] init];
if (sock != -1) {
copy->sock = dup(sock);
if (copy->sock == -1)
return nil;
}
return copy;
}
- (BOOL)isClosed
{
return (sock == -1 && domain == -1 && type == -1);
}
- (int)domain
{
return domain;
}
- (int)socket
{
return sock;
}
- (int)type
{
return type;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.