// // 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 #import @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