rendered paste body//
// REBUnixSocketPort.m
// iBeeZz
//
// Created by Olivier Delécluse on 03/11/07.
// Copyright 2007 reboute Softwares. All rights reserved.
//
#import "REBUnixSocketPort.h"
#define kREBUnixSocketPortPrefix "/var/tmp/REBUnixSocketPort "
#import <sys/socket.h>
#import <sys/un.h>
@implementation REBUnixSocketPort
- (id)initAsServerWithName:(NSString *)name
{
if ( !name )
{
[self release];
return nil;
}
else
{
struct sockaddr_un socketAddress;
bzero(&socketAddress,sizeof(socketAddress));
socketAddress.sun_len = sizeof(socketAddress);
socketAddress.sun_family = AF_UNIX;
strcpy(socketAddress.sun_path, kREBUnixSocketPortPrefix);
strcat(socketAddress.sun_path, [name cStringUsingEncoding:NSASCIIStringEncoding]);
unlink(socketAddress.sun_path);
NSData* socketAddressData = [NSData dataWithBytes:&socketAddress
length:sizeof(struct sockaddr_un)];
self = [super initWithProtocolFamily:AF_UNIX
socketType:SOCK_STREAM
protocol:0
address:socketAddressData];
int socket = [self socket];
bind(socket, (struct sockaddr *)&socketAddress, sizeof(struct sockaddr_un));
listen(socket, 128);
accept(socket, (struct sockaddr *)&socketAddress, sizeof(struct sockaddr_un));
}
return self;
}
- (id)initAsClientWithName:(NSString *)name
{
if ( !name )
{
[self release];
return nil;
}
else
{
struct sockaddr_un socketAddress;
bzero(&socketAddress,sizeof(socketAddress));
socketAddress.sun_len = sizeof(socketAddress);
socketAddress.sun_family = AF_UNIX;
strcpy(socketAddress.sun_path, kREBUnixSocketPortPrefix);
strcat(socketAddress.sun_path, [name cStringUsingEncoding:NSASCIIStringEncoding]);
NSData* socketAddressData = [NSData dataWithBytes:&socketAddress
length:sizeof(struct sockaddr_un)];
self = [super initRemoteWithProtocolFamily:AF_UNIX
socketType:SOCK_STREAM
protocol:0
address:socketAddressData];
int socket = [self socket];
connect(socket, (struct sockaddr *)&socketAddress, sizeof(struct sockaddr_un));
}
return self;
}
- (void)dealloc
{
// unlink(socketAddress.sun_path);
[super dealloc];
}
@end