X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=comstack%2Fxmosi.c;h=9990468934b7bb035deb8cd8ede2eb430522e57d;hp=9e15a289377002eabe6a139eb0d7d923b5f21b98;hb=657fb99115b87a5244e9a33bbe4ca3d9d18849c4;hpb=8a425ff5328260fff0dcc28f08b5bdf6bfac84ab diff --git a/comstack/xmosi.c b/comstack/xmosi.c index 9e15a28..9990468 100644 --- a/comstack/xmosi.c +++ b/comstack/xmosi.c @@ -4,7 +4,16 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: xmosi.c,v $ - * Revision 1.1 1995-06-14 09:58:20 quinn + * Revision 1.4 1995-09-27 15:02:45 quinn + * Modified function heads & prototypes. + * + * Revision 1.3 1995/06/16 10:30:38 quinn + * Added REUSEADDR. + * + * Revision 1.2 1995/06/15 12:30:07 quinn + * Added @ as hostname alias for INADDR ANY. + * + * Revision 1.1 1995/06/14 09:58:20 quinn * Renamed yazlib to comstack. * * Revision 1.15 1995/05/29 08:12:33 quinn @@ -129,7 +138,7 @@ static int addopt(struct netbuf *optbuf, unsigned long level, unsigned long return 0; } -COMSTACK mosi_type(int blocking, int protocol) +COMSTACK MDF mosi_type(int blocking, int protocol) { COMSTACK r; mosi_state *state; @@ -187,7 +196,7 @@ int hex2oct(char *hex, char *oct) * addressing specific to our hack of OSI transport. A sockaddr_in wrapped * up in a t_mosiaddr in a netbuf (on a stick). */ -struct netbuf *mosi_strtoaddr(const char *str) +struct MDF netbuf MDF *mosi_strtoaddr(const char *str) { struct netbuf *ret = malloc(sizeof(struct netbuf)); struct sockaddr_in *add = malloc(sizeof(struct sockaddr_in)); @@ -236,7 +245,9 @@ struct netbuf *mosi_strtoaddr(const char *str) port = atoi(b + 1); } add->sin_port = htons(port); - if ((hp = gethostbyname(buf))) + if (!strcmp("@", buf)) + add->sin_addr.s_addr = INADDR_ANY; + else if ((hp = gethostbyname(buf))) memcpy(&add->sin_addr.s_addr, *hp->h_addr_list, sizeof(struct in_addr)); else if ((tmpadd = inet_addr(buf)) != 0) memcpy(&add->sin_addr.s_addr, &tmpadd, sizeof(struct in_addr)); @@ -318,7 +329,13 @@ int mosi_bind(COMSTACK h, void *address, int mode) { int res; struct t_bind bnd; + int one = 1; + if (setsockopt(h->iofile, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0) + { + h->errno = CSYSERR; + return -1; + } if (mode == CS_SERVER) bnd.qlen = 3; else