c++ - Windows Socket unable to bind on VPN IP address -
i trying bind particular ip on vpn network , able ping it, connect , able telnet on particular port windows mfc program gives error code 10049 , not able go further in debugging problem appreciated, running on visual studio 2012 win 7 , remote client running on linux variant.
this part of code getting error ip address configurable hardcoding debug.
cstardoc *p_doc = (cstardoc*) lpparam; bool fflag = true; const int max_msglen = max(sizeof(disp_info_t ), sizeof(reason_string_t )); char buffer[max_msglen]; disp_info_t *p_disp_info_buffer = (disp_info_t *) buffer; disp_info_t disp_info_combined; //receiving combined butter disp_info_t_1 *p_disp_info_buffer1; //receiving buffer pointer dispinfo1 disp_info_t_2 *p_disp_info_buffer2; //receiving buffer pointer dispinfo2 int msgreceived = 0; // initially, 0. // same msgnumber, when program receives first portion of buffer, set 1, // when program receives both portions, set 0. // when program misses portion same msgnumber, set 0 also. int currentmsgnum1 = 0; int currentmsgnum2 = 0; int err; cstring msg; sockaddr_in saudpportin; sockaddr_in from; struct addrinfo *result = null; struct addrinfo *ptr = null; struct addrinfo hints; ::memset( &hints,0, sizeof(hints) ); hints.ai_family = af_unspec; //hints.ai_socktype = sock_dgram; //hints.ai_protocol = ipproto_udp; char asideip[] = "192.168.1.129"; bool othersideisstandby = false; static bool dofirstmsg = true; // p_disp_info_combined = & disp_info_combined; p_doc->threadrunning = true; p_doc->udpsocket = socket(af_inet, sock_dgram, 0); if (invalid_socket == p_doc->udpsocket) { cstring msg = "invalid socket: "+ wsagetlasterror(); afxmessagebox(msg); return(-1); } long ip = 0; int sockbufsize = 0; int timeout = 2000; // ip matches ip of qnx machines in last octet. // note: in host byte format. int errcode = getaddrinfo(asideip,null,&hints,&result); for(ptr = result;ptr != null ;ptr=ptr->ai_next) { switch (ptr->ai_family) { default: break; case af_inet : ip = p_doc->myip; saudpportin.sin_family = af_inet; saudpportin.sin_addr.s_addr = (((sockaddr_in*) ptr->ai_addr)->sin_addr).s_addr; saudpportin.sin_port = htons(p_doc->port_addr ); int length = sizeof(buffer) *2; //err = setsockopt(p_doc->udpsocket,sol_socket, so_reuseaddr, (char *)&fflag, sizeof(fflag)); //err = setsockopt(p_doc->udpsocket,sol_socket, so_broadcast, (char *)&fflag, sizeof(fflag)); err = setsockopt(p_doc->udpsocket, sol_socket, so_rcvbuf, (char *)&length, sizeof(length)); // keep hanging forever. err = setsockopt(p_doc->udpsocket, sol_socket, so_rcvtimeo, (char *)&timeout, sizeof(timeout)); err = bind(p_doc->udpsocket, (sockaddr far *)&saudpportin, sizeof(sockaddr_in)); if (err == socket_error) { int errcode = wsagetlasterror(); closesocket(p_doc->udpsocket); /* msg.format("network connectivity failed, please check network. "); afxmessagebox(msg); closesocket(p_doc->udpsocket); p_doc->udpsocket = -1; // task trying attach port. return(1);*/ } } }
thanks
you can not bind remote address , error shows, such case. use bind system call local ip , port.
here msdn says error:
wsaeaddrnotavail 10049
cannot assign requested address. requested address not valid in context. results attempt bind address not valid local computer. can result connect, sendto, wsaconnect, wsajoinleaf, or wsasendto when remote address or port not valid remote computer (for example, address or port 0).
Comments
Post a Comment