From: hadaq Date: Wed, 18 Jul 2012 15:25:47 +0000 (+0000) Subject: added getsockname, receive on port +1, GK, MT X-Git-Tag: v6.0~30 X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=fd452c0573f5b0b3121cfe0d035ae584b0f4852b;p=trbnettools.git added getsockname, receive on port +1, GK, MT --- diff --git a/libtrbnet/trbnet.c b/libtrbnet/trbnet.c index 68c2eff..df3c0ae 100644 --- a/libtrbnet/trbnet.c +++ b/libtrbnet/trbnet.c @@ -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 @@ -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 */