diff --git a/QnetVoice.cpp b/QnetVoice.cpp index 22e97a1..dac03fe 100644 --- a/QnetVoice.cpp +++ b/QnetVoice.cpp @@ -96,13 +96,14 @@ void calcPFCS(unsigned char rawbytes[58]) bool dst_open(const char *ip, const short port) { - int reuse = 1; - sockDst = socket(PF_INET,SOCK_DGRAM,0); if (sockDst == -1) { printf("Failed to create DSTAR socket\n"); return true; } + fcntl(sockDst,F_SETFL,O_NONBLOCK); + + int reuse = 1; if (setsockopt(sockDst,SOL_SOCKET,SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) == -1) { close(sockDst); sockDst = -1; @@ -114,7 +115,12 @@ bool dst_open(const char *ip, const short port) toDst.sin_port = htons(port); toDst.sin_addr.s_addr = inet_addr(ip); - fcntl(sockDst,F_SETFL,O_NONBLOCK); + if (bind(sockDst, (struct sockaddr *)&toDst, sizeof(struct sockaddr_in)) != 0) { + printf("Failed to bind %s:%d, errno=%d, %s\n", ip, port, errno, strerror(errno)); + close(sockDst); + sockDst = -1; + return true; + } return false; } @@ -379,8 +385,8 @@ int main(int argc, char *argv[]) dstr.vpkt.ctrl = dsvt.counter; for (int i=0; i<3; i++) dstr.vpkt.hdr.flag[i] = dsvt.hdr.flag[i]; - memset(dstr.vpkt.hdr.r2, ' ', 36); - memcpy(dstr.vpkt.hdr.r2, REPEATER.c_str(), REPEATER.size()); + memset(dstr.vpkt.hdr.flag+3, ' ', 36); + memcpy(dstr.vpkt.hdr.flag+3, REPEATER.c_str(), REPEATER.size()); dstr.vpkt.hdr.r1[7] = module; memcpy(dstr.vpkt.hdr.r1, REPEATER.c_str(), REPEATER.size()); dstr.vpkt.hdr.r2[7] = 'G';