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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -