home *** CD-ROM | disk | FTP | other *** search
- /* Abstract class to act as a cover for sockets.
- *
- * Copyright (c) 1994 Christopher J. Kane.
- *
- * 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 (20 April 1994)
- */
-
- #import <misckit/MiscSocket.h>
- #import <sys/errno.h>
- extern int close(int);
- extern int dup(int);
- extern int errno;
-
- @implementation MiscSocket
-
- - init
- {
- if (0 <= sock) {
- int old_errno = errno;
- close(sock);
- errno = old_errno;
- }
- sock = domain = type = -1;
- return self;
- }
-
- - 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)
- return [super free];
- domain = aDomain;
- type = aType;
- return self;
- }
-
- - close
- {
- return [self init];
- }
-
- - copyFromZone:(NXZone *)zone
- {
- MiscSocket *copy = [super copyFromZone:zone];
- if (sock != -1) {
- copy->sock = dup(sock);
- if (copy->sock == -1)
- return [copy free];
- }
- return copy;
- }
-
- - free
- {
- [self close];
- return [super free];
- }
-
- - read:(NXTypedStream *)stream
- {
- [super read:stream];
- NXReadTypes(stream, "iii", &sock, &domain, &type);
- return self;
- }
-
- - write:(NXTypedStream *)stream
- {
- [super write:stream];
- NXWriteTypes(stream, "iii", &sock, &domain, &type);
- return self;
- }
-
- - (BOOL)isClosed
- {
- return (sock == -1 && domain == -1 && type == -1);
- }
-
- - (int)domain
- {
- return domain;
- }
-
- - (int)socket
- {
- return sock;
- }
-
- - (int)type
- {
- return type;
- }
-
- @end
-