Various minor windows bugfixes and documentation cleanups.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@13167 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-Macdonald 2002-03-20 12:03:30 +00:00
parent 276f72343e
commit a7641b814c
6 changed files with 148 additions and 28 deletions

View file

@ -1447,14 +1447,22 @@ static Class tcpPortClass;
NSLog(@"unable to create socket - %s", GSLastErrorStr(errno));
DESTROY(port);
}
#ifndef __MINGW__
/*
* Under unix, SO_REUSEADDR means that the port can be reused
* immediately that this porcess exits. Under windoze it means
* that multiple processes can serve the same port simultaneously.
* We don't want that windows behavior!
*/
else if (setsockopt(desc, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse,
sizeof(reuse)) < 0)
sizeof(reuse)) < 0)
{
(void) close(desc);
NSLog(@"unable to set reuse on socket - %s",
GSLastErrorStr(errno));
DESTROY(port);
}
#endif
else if (bind(desc, (struct sockaddr *)&sockaddr,
sizeof(sockaddr)) < 0)
{
@ -1664,12 +1672,20 @@ static Class tcpPortClass;
{
NSLog(@"unable to create socket - %s", GSLastErrorStr(errno));
}
#ifndef __MINGW__
/*
* Under unix, SO_REUSEADDR means that the port can be reused
* immediately that this porcess exits. Under windoze it means
* that multiple processes can serve the same port simultaneously.
* We don't want that windows behavior!
*/
else if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&opt,
sizeof(opt)) < 0)
{
(void)close(sock);
NSLog(@"unable to set reuse on socket - %s", GSLastErrorStr(errno));
}
#endif
else if ((handle = [GSTcpHandle handleWithDescriptor: sock]) == nil)
{
(void)close(sock);

View file

@ -38,6 +38,8 @@
#include <Foundation/NSHost.h>
#include <Foundation/NSByteOrder.h>
#include "../Tools/gdomap.h"
#if defined(__MINGW__)
#include <winsock2.h>
#else
@ -104,8 +106,9 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
struct servent *sp;
if (pcl)
proto = [pcl cString];
{
proto = [pcl lossyCString];
}
memset(sin, '\0', sizeof(*sin));
sin->sin_family = AF_INET;
@ -122,11 +125,11 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
name = [host address];
#ifndef HAVE_INET_ATON
sin->sin_addr.s_addr = inet_addr([name cString]);
sin->sin_addr.s_addr = inet_addr([name lossyCString]);
if (sin->sin_addr.s_addr == INADDR_NONE)
return NO;
#else
if (inet_aton([name cString], &sin->sin_addr) == 0)
if (inet_aton([name lossyCString], &sin->sin_addr) == 0)
return NO;
#endif
}
@ -138,14 +141,15 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
sin->sin_port = 0;
return YES;
}
else if ((sp = getservbyname([svc cString], proto)) == 0)
else if ((sp = getservbyname([svc lossyCString], proto)) == 0)
{
const char* ptr = [svc cString];
const char* ptr = [svc lossyCString];
int val = atoi(ptr);
while (isdigit(*ptr))
ptr++;
{
ptr++;
}
if (*ptr == '\0' && val <= 0xffff)
{
gsu16 v = val;
@ -153,8 +157,21 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
sin->sin_port = GSSwapHostI16ToBig(v);
return YES;
}
else if (strcmp(ptr, "gdomap") == 0)
{
gsu16 v;
#ifdef GDOMAP_PORT_OVERRIDE
v = GDOMAP_PORT_OVERRIDE
#else
v = 538; // IANA allocated port
#endif
sin->sin_port = GSSwapHostI16ToBig(v);
return YES;
}
else
return NO;
{
return NO;
}
}
else
{

View file

@ -37,6 +37,8 @@
#include <Foundation/NSHost.h>
#include <Foundation/NSByteOrder.h>
#include "../Tools/gdomap.h"
#include <winsock2.h>
#include <fcntl.h>
@ -71,7 +73,7 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
struct servent *sp;
if (pcl)
proto = [pcl cString];
proto = [pcl lossyCString];
memset(sin, '\0', sizeof(*sin));
sin->sin_family = AF_INET;
@ -89,11 +91,11 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
name = [host address];
#ifndef HAVE_INET_ATON
sin->sin_addr.s_addr = inet_addr([name cString]);
sin->sin_addr.s_addr = inet_addr([name lossyCString]);
if (sin->sin_addr.s_addr == INADDR_NONE)
return NO;
#else
if (inet_aton([name cString], &sin->sin_addr) == 0)
if (inet_aton([name lossyCString], &sin->sin_addr) == 0)
return NO;
#endif
}
@ -105,9 +107,9 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
sin->sin_port = 0;
return YES;
}
else if ((sp = getservbyname([svc cString], proto)) == 0)
else if ((sp = getservbyname([svc lossyCString], proto)) == 0)
{
const char* ptr = [svc cString];
const char* ptr = [svc lossyCString];
int val = atoi(ptr);
while (isdigit(*ptr))
@ -120,8 +122,21 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
sin->sin_port = GSSwapHostI16ToBig(v);
return YES;
}
else if (strcmp(ptr, "gdomap") == 0)
{
gsu16 v;
#ifdef GDOMAP_PORT_OVERRIDE
v = GDOMAP_PORT_OVERRIDE
#else
v = 538; // IANA allocated port
#endif
sin->sin_port = GSSwapHostI16ToBig(v);
return YES;
}
else
return NO;
{
return NO;
}
}
else
{
@ -307,8 +322,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
return nil;
}
setsockopt(net, SOL_SOCKET, SO_REUSEADDR, (char *)&status, sizeof(status));
if (bind(net, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{
NSLog(@"unable to bind to port %s:%d - %s",