X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=comstack%2Fxmosi.c;h=bed1dd1cb8808bbde0244d1c5c64910c4decf9e1;hb=0ba153ff51508cf37d3f5bbc48e3738dacfc6f42;hp=9e15a289377002eabe6a139eb0d7d923b5f21b98;hpb=8a425ff5328260fff0dcc28f08b5bdf6bfac84ab;p=yaz-moved-to-github.git diff --git a/comstack/xmosi.c b/comstack/xmosi.c index 9e15a28..bed1dd1 100644 --- a/comstack/xmosi.c +++ b/comstack/xmosi.c @@ -4,7 +4,22 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: xmosi.c,v $ - * Revision 1.1 1995-06-14 09:58:20 quinn + * Revision 1.6 1995-09-29 17:12:00 quinn + * Smallish + * + * Revision 1.5 1995/09/28 10:24:32 quinn + * Windows changes + * + * 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 @@ -187,7 +202,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 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 +251,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 +335,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->cerrno = CSYSERR; + return -1; + } if (mode == CS_SERVER) bnd.qlen = 3; else @@ -357,7 +380,7 @@ COMSTACK mosi_accept(COMSTACK h) if (h->state != CS_INCON) { - h->errno = CSOUTSTATE; + h->cerrno = CSOUTSTATE; return 0; } if (!(new = malloc(sizeof(*new))))