mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 00:11:26 +00:00
networking improvements
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@25887 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
3d12feda98
commit
14b54a6b44
10 changed files with 549 additions and 368 deletions
|
@ -49,11 +49,6 @@
|
|||
@end
|
||||
|
||||
@interface GSLocalInputStream : GSSocketInputStream
|
||||
{
|
||||
@private
|
||||
struct sockaddr_un _peerAddr;
|
||||
}
|
||||
|
||||
/**
|
||||
* the designated initializer
|
||||
*/
|
||||
|
@ -73,11 +68,6 @@
|
|||
@end
|
||||
|
||||
@interface GSLocalOutputStream : GSSocketOutputStream
|
||||
{
|
||||
@private
|
||||
struct sockaddr_un _peerAddr;
|
||||
}
|
||||
|
||||
/**
|
||||
* the designated initializer
|
||||
*/
|
||||
|
@ -218,29 +208,22 @@
|
|||
|
||||
if ((self = [super init]) != nil)
|
||||
{
|
||||
_peerAddr.sun_family = AF_LOCAL;
|
||||
if (strlen(real_addr)>sizeof(_peerAddr.sun_path)-1) // too long
|
||||
struct sockaddr_un peer;
|
||||
|
||||
peer.sun_family = AF_LOCAL;
|
||||
if (strlen(real_addr) > sizeof(peer.sun_path)-1) // too long
|
||||
{
|
||||
DESTROY(self);
|
||||
}
|
||||
else
|
||||
{
|
||||
strncpy(_peerAddr.sun_path, real_addr, sizeof(_peerAddr.sun_path)-1);
|
||||
strncpy(peer.sun_path, real_addr, sizeof(peer.sun_path)-1);
|
||||
[self _setAddress: (struct sockaddr)&peer];
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (struct sockaddr*) _peerAddr
|
||||
{
|
||||
return (struct sockaddr*)&_peerAddr;
|
||||
}
|
||||
|
||||
- (socklen_t) _sockLen
|
||||
{
|
||||
return sizeof(struct sockaddr_un);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation GSFileOutputStream
|
||||
|
@ -364,29 +347,22 @@
|
|||
|
||||
if ((self = [super init]) != nil)
|
||||
{
|
||||
_peerAddr.sun_family = AF_LOCAL;
|
||||
if (strlen(real_addr) > sizeof(_peerAddr.sun_path)-1) // too long
|
||||
struct sockaddr_un peer;
|
||||
|
||||
peer.sun_family = AF_LOCAL;
|
||||
if (strlen(real_addr) > sizeof(peer.sun_path)-1) // too long
|
||||
{
|
||||
DESTROY(self);
|
||||
}
|
||||
else
|
||||
{
|
||||
strncpy(_peerAddr.sun_path, real_addr, sizeof(_peerAddr.sun_path)-1);
|
||||
strncpy(peer.sun_path, real_addr, sizeof(peer.sun_path)-1);
|
||||
[self _setAddress: (struct sockaddr*)&peer];
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (struct sockaddr*) _peerAddr
|
||||
{
|
||||
return (struct sockaddr*)&_peerAddr;
|
||||
}
|
||||
|
||||
- (socklen_t) sockLen
|
||||
{
|
||||
return sizeof(struct sockaddr_un);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation NSStream
|
||||
|
@ -657,23 +633,14 @@
|
|||
return [GSLocalOutputStream class];
|
||||
}
|
||||
|
||||
- (socklen_t) _sockLen
|
||||
{
|
||||
return sizeof(struct sockaddr_un);
|
||||
}
|
||||
|
||||
- (struct sockaddr*) _serverAddr
|
||||
{
|
||||
return (struct sockaddr*)&_serverAddr;
|
||||
}
|
||||
|
||||
- (id) initToAddr: (NSString*)addr
|
||||
{
|
||||
if ((self = [super init]) != nil)
|
||||
{
|
||||
const char* real_addr = [addr fileSystemRepresentation];
|
||||
struct sockaddr_un addr;
|
||||
|
||||
if (strlen(real_addr) > sizeof(_serverAddr.sun_path)-1)
|
||||
if (strlen(real_addr) > sizeof(addr.sun_path)-1)
|
||||
{
|
||||
DESTROY(self);
|
||||
}
|
||||
|
@ -681,7 +648,7 @@
|
|||
{
|
||||
SOCKET s;
|
||||
|
||||
_serverAddr.sun_family = AF_LOCAL;
|
||||
addr.sun_family = AF_LOCAL;
|
||||
s = socket(AF_LOCAL, SOCK_STREAM, 0);
|
||||
if (s < 0)
|
||||
{
|
||||
|
@ -690,8 +657,8 @@
|
|||
else
|
||||
{
|
||||
[(GSSocketStream*)self _setSock: s];
|
||||
strncpy(_serverAddr.sun_path, real_addr,
|
||||
sizeof(_serverAddr.sun_path)-1);
|
||||
strncpy(addr.sun_path, real_addr, sizeof(addr.sun_path)-1);
|
||||
[self _setAddress: (struct sockaddr)&addr];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue