]> jspc29.x-matter.uni-frankfurt.de Git - trbnettools.git/commitdiff
added getsockname, receive on port +1, GK, MT
authorhadaq <hadaq>
Wed, 18 Jul 2012 15:25:47 +0000 (15:25 +0000)
committerhadaq <hadaq>
Wed, 18 Jul 2012 15:25:47 +0000 (15:25 +0000)
libtrbnet/trbnet.c

index 68c2eff9b785505cbcb65b22513df04a93dd3586..df3c0aeadff44621815c0cd937800570bccf7158 100644 (file)
@@ -1,11 +1,11 @@
 #ifdef ETRAX
-const char trbnet_version[] = "$Revision: 4.29 $  Local Etrax";
+const char trbnet_version[] = "$Revision: 4.30 $  Local Etrax";
 #elif defined PEXOR
-const char trbnet_version[] = "$Revision: 4.29 $  Local Pexor";
+const char trbnet_version[] = "$Revision: 4.30 $  Local Pexor";
 #elif defined TRB3
-const char trbnet_version[] = "$Revision: 4.29 $  Local TRB3";
+const char trbnet_version[] = "$Revision: 4.30 $  Local TRB3";
 #else
-const char trbnet_version[] = "$Revision: 4.29 $  UNKNOWN, i.e. ERROR";
+const char trbnet_version[] = "$Revision: 4.30 $  UNKNOWN, i.e. ERROR";
 #endif
 
 #include <stdlib.h>
@@ -1591,44 +1591,49 @@ int init_ports()
     return -1;
   }
  
-  /* Sender Socket */
+  /* Sender/Receiver Socket */
   trb3_sockfd = socket(AF_INET, SOCK_DGRAM, 0);
-  if (trb3_sockfd == -1) {
+  if (trb3_sockfd  == -1) {
     trb_errno = TRB_TRB3_SOCKET_ERROR;
     return -1;
   }
-  sender_addr.sin_family = AF_INET;
-  sender_addr.sin_port = htons(trb3_port);  
-  sender_addr.sin_addr = *((struct in_addr *)host->h_addr);
-  memset(&(sender_addr.sin_zero), 0, 8);
+
+
+   sender_addr.sin_family = AF_INET;
+   sender_addr.sin_port = htons(trb3_port);  
+   sender_addr.sin_addr = *((struct in_addr *)host->h_addr);
+   memset(&(sender_addr.sin_zero), 0, 8);
+
   if (connect(trb3_sockfd, 
-              (struct sockaddr *)&sender_addr,
-              sizeof(struct sockaddr)) == -1) {
+             (struct sockaddr *)&sender_addr,
+             sizeof(struct sockaddr)) == -1) {
     trb_errno = TRB_TRB3_SOCKET_ERROR;
-    return -1;
-  }
-  
-  if (trb_debug > 0) {
-    fprintf(stderr, "init_ports: TRB3-Socket out opened = %d\n", trb3_sockfd);
-  }
-  
-  /* Receiver Socket */
-  trb3_sockfd_in = socket(AF_INET, SOCK_DGRAM, 0);
-  if (trb3_sockfd_in == -1) {
-    trb_errno = TRB_TRB3_SOCKET_ERROR;
-    return -1;
+     return -1;
   }
+   
+  struct sockaddr_in temp;
+  int addr_size = sizeof(temp);
+  getsockname(trb3_sockfd, &temp, &addr_size);
 
+  printf("got socketnumber: %d\n", ntohs(temp.sin_port));
   /* Set Socket Timepout */
   tv.tv_sec = 3;    /* 10 Secs Timeout */
   tv.tv_usec = 0;  /* do not init this, it can cause strange errors */
-  setsockopt(trb3_sockfd_in, SOL_SOCKET, SO_RCVTIMEO, 
+  setsockopt(trb3_sockfd, SOL_SOCKET, SO_RCVTIMEO, 
              (char *)&tv,sizeof(struct timeval));
-
+  
+  /* ??? */
   receiver_addr.sin_family = AF_INET;
-  receiver_addr.sin_port = htons(trb3_port);  
+  receiver_addr.sin_port = htons(ntohs(temp.sin_port) + 1); /*htons(25000);  */
   receiver_addr.sin_addr.s_addr = htonl(INADDR_ANY);
   memset(&(receiver_addr.sin_zero), 0, 8);
+
+  trb3_sockfd_in = socket(AF_INET, SOCK_DGRAM, 0);
+  if (trb3_sockfd_in  == -1) {
+    trb_errno = TRB_TRB3_SOCKET_ERROR;
+    return -1;
+  }
+
   if (bind(trb3_sockfd_in,
           (struct sockaddr *)&receiver_addr,
           sizeof(struct sockaddr)) ==-1) {
@@ -1637,7 +1642,7 @@ int init_ports()
   }
   
   if (trb_debug > 0) {
-    fprintf(stderr, "init_ports: TRB3-Socket in opened = %d\n", trb3_sockfd_in);
+    fprintf(stderr, "init_ports: TRB3-Socket in opened = %d\n", trb3_sockfd);
   }
   
   /* Init semaphore and signal handling */