c - Cannot bind to LLMNR socket -
i trying implement microsoft's llmnr discovery protocol on web server. have zeroconf working, , re-using lot of zeroconf code. zeroconf uses port 5353, ip address 224.0.0.251 messaging, , llmnr uses port 5355, ip address 224.0.0.252.
i re-used zeroconf startup code, , changed port , ip address, cannot socket bind port. error 10013 "an attempt made access socket in way forbidden access permissions". here code:
#define multicast_port 5355 #define multicast_address "224.0.0.252" int llmnr_open( void ) { char reuseaddress; char loopback; int nret; dword threadid; wifimodule_gethostname(llmnr_strservice); wifimodule_gethostname(llmnr_strhost); llmnr_mreq.imr_multiaddr.s_addr = inet_addr(multicast_address); llmnr_mreq.imr_interface.s_addr = inaddr_any; llmnr_serversocket = socket(af_inet, sock_dgram, 0); if(llmnr_serversocket < 0) { llmnr_errorcode = wsagetlasterror(); return(llmnr_cannot_setup_socket); } reuseaddress = true; nret = setsockopt(llmnr_serversocket, sol_socket, so_reuseaddr, &reuseaddress, sizeof(reuseaddress)); if (nret == socket_error) { llmnr_errorcode = wsagetlasterror(); return(llmnr_cannot_reuse_socket); } loopback = false; nret = setsockopt(llmnr_serversocket, ipproto_ip, ip_multicast_loop, &loopback, sizeof(loopback)); if (nret == socket_error) { llmnr_errorcode = wsagetlasterror(); return(llmnr_cannot_disable_loopback); } if(setsockopt(llmnr_serversocket, ipproto_ip, ip_add_membership, (char*)&llmnr_mreq, sizeof(llmnr_mreq)) == socket_error) { llmnr_errorcode = wsagetlasterror(); return(llmnr_cannot_set_multicast); } llmnr_serveraddress.sin_family = af_inet; llmnr_serveraddress.sin_addr.s_addr = htonl(inaddr_any); llmnr_serveraddress.sin_port = htons(multicast_port); if(bind(llmnr_serversocket, (struct sockaddr*)&llmnr_serveraddress, sizeof(llmnr_serveraddress)) != 0) { llmnr_errorcode = wsagetlasterror(); return(llmnr_cannot_bind_socket); } /* set address send function */ llmnr_multicastaddress.sin_family = af_inet; llmnr_multicastaddress.sin_addr.s_addr = inet_addr(multicast_address); llmnr_multicastaddress.sin_port = htons(multicast_port); llmnr_listenthreadptr = createthread( null, // default security attributes 0, // use default stack size llmnr_listenthread, // thread function 0, // argument thread function 0, // use default creation flags &threadid); // returns thread identifier llmnr_logindex = 0; return(llmnr_ok); }
the code fails @ bind(llmnr_serversocket
line, if change port number zeroconf
port (3535) works fine.
i tried using netstat, , seem port in use, not know how find out if have program hogging port
>netstat -a active connections proto local address foreign address state udp 0.0.0.0:123 *:* udp 0.0.0.0:5355 *:* udp 0.0.0.0:9595 *:* udp 0.0.0.0:33354 *:* udp 0.0.0.0:33355 *:*
any ideas?
Comments
Post a Comment