Modified function heads & prototypes.
[yaz-moved-to-github.git] / comstack / xmosi.c
index 9e15a28..9990468 100644 (file)
@@ -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