All pastes #772379 Raw Edit

Something

public text v1 · immutable
·published 2007-11-13 19:46 UTC
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